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 a viral iOS "AirDrop" notification-carousel video ad (≈6–8s, 9:16) from a brand line plus 6–16 real product photos — a native AirDrop share-sheet card ("Brand would like to share a ___ · Decline / Accept") springs up and its preview window CYCLES through the products,
$ npx -y skills add gooseworks-ai/goose-skills --skill render-airdrop-carousel --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/render-airdrop-carouselContext preview
The summary Claude sees to decide when to auto-load this skill.
Assemble a viral iOS "AirDrop" notification-carousel video ad (≈6–8s, 9:16) from a brand line plus 6–16 real product photos — a native AirDrop share-sheet card ("Brand would like to share a ___ · Decline / Accept") springs up and its preview window CYCLES through the products,
name: render-airdrop-carousel
description: Assemble a viral iOS "AirDrop" notification-carousel video ad (≈6–8s, 9:16) from a brand line plus 6–16 real product photos — a native AirDrop share-sheet card ("Brand would like to share a ___ · Decline / Accept") springs up and its preview window CYCLES through the products, landing on a range/lineup payoff with an Accept tap; a chime + soft per-swap ticks track the swaps. DETERMINISTIC assembly — an HTML card (real DOM text) rendered to PNG via headless Chrome, chroma-keyed, its magenta window refilled per-product in PIL, then animated + audio-synthed with FFmpeg. FREE (no paid model calls); the recipe supplies the brand line, product images, and payoff and gates the only optional paid step (a hero shot when the brand has NO usable photo → create-image-fal). Use for the airdrop-notification-carousel format.
status: activeThe free, deterministic renderer for the **airdrop-notification-carousel** video ad format — the viral iOS "AirDrop" trend where a native share-sheet card ("**Brand** would like to share a *candle* · Decline / Accept") springs up on the phone and its preview window flips through a **carousel of real product photos**, landing on a range/lineup payoff with an Accept tap.
This is a DETERMINISTIC composite — **no generative video, no AI-rendered product**. A real-DOM AirDrop card is rendered once to PNG (headless Chrome), chroma-keyed, and its preview window is refilled per-product in PIL, then animated + audio-synthed with FFmpeg. The whole point of the format is crisp system-UI text and **real** product photography, both of which a video model would smear. This capability makes **no paid calls**; the recipe gates the only optional paid step — generating a hero product shot when the brand has NO usable photo at all (→ `create-image-fal`).
Default output ≈ **6–8s**, 1080×1920, h264 + aac. Duration is DERIVED, not trimmed — `first_hold + (N-1)·per + final_hold`. Add images or raise `per` to lengthen.
AirDrop card on a **green page** (`#00e000`) with a **magenta preview window** (`#ff00ff`) and a solid brand band (wordmark SVG or text + tagline). Real DOM text — `AirDrop`, `Decline`, `Accept`, and the brand line are DOM/SVG, never AI-rendered.
screenshot of both card states → `compose_carousel`. One `--config`, one MP4.
magenta window → fill it per-product (cover-crop) → blurred per-product backdrop + push-in → card spring-up (iOS ease-out-back) + carousel + Accept tap → synth audio (whoosh on entry, chime on land, a tick per swap, a pop on the tap) → encode h264+aac.
(brand-neutral worked defaults; replace every `/abs/path/...` placeholder).
`#00e000` **green** = page background, keyed to the card's alpha. `#ff00ff` **magenta** = preview window, replaced per product. **Neither color may appear in the card art or any product photo** — a product image containing near-pure green or magenta gets keyed/misread. Swap the image or tighten the `window_mask` thresholds if it bleeds.
AirDropped items — no AI-generated products in the carousel.
they stay pixel-crisp. Cover-crop the window; white-bg PDP shots reading as "product in a white tile" is on-brand and fine.
read as "the whole line" (lineup / family / all-shades).
not filled from a brand-kit proof section.
install chromium`). If Playwright is unavailable, run `build_card.py`, screenshot `chrome.html` / `chrome-pressed.html` (fullPage) → `chrome-green.png` / `chrome-green-pressed.png` via the chrome-devtools MCP, then call `compose_carousel.py` directly.
when the brand has NO usable product photo) — the only paid, proxy-routed step.
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.