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.
npx skills add https://github.com/gooseworks-ai/goose-skills --skill render-imessage-chat
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.
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.
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.
(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 (fromthe 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.
thread (kept short — splitlong 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.
Create beautiful visual art in .png and .pdf documents using design philosophy. You should use this skill when the user asks to create a poster, piece of art, design, or other static piece. Create original visual designs, never copying existing artists' work to avoid copyright violations.
Creating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems. Create original algorithmic art rather than copying existing artists' work to avoid copyright violations.
Improves the quality of images, especially screenshots, by enhancing resolution, sharpness, and clarity. Perfect for preparing images for presentations, documentation, or social media posts.
Downloads videos from YouTube and other platforms for offline viewing, editing, or archival. Handles various formats and quality options.
Lightweight WSI tile extraction and preprocessing. Use for basic slide processing tissue detection, tile extraction, stain normalization for H&E images. Best for simple pipelines, dataset preparation, quick tile-based analysis. For advanced spatial proteomics, multiplexed imaging, or deep learning pipelines use pathml.
Microscopy data management platform. Access images via Python, retrieve datasets, analyze pixels, manage ROIs/annotations, batch processing, for high-content screening and microscopy workflows.
Python library for working with DICOM (Digital Imaging and Communications in Medicine) files. Use this skill when reading, writing, or modifying medical imaging data in DICOM format, extracting pixel data from medical images (CT, MRI, X-ray, ultrasound), anonymizing DICOM files, working with DICOM metadata and tags, converting DICOM images to other formats, handling compressed DICOM data, or processing medical imaging datasets. Applies to tasks involving medical image analysis, PACS systems, radiology workflows, and healthcare imaging applications.
This skill should be used when working with pre-trained transformer models for natural language processing, computer vision, audio, or multimodal tasks. Use for text generation, classification, question answering, translation, summarization, image classification, object detection, speech recognition, and fine-tuning models on custom datasets.
Take gooseworks-ai/render-imessage-chat from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.
The instructions reference npm, npx.
Without those the skill loads but fails at the first command.