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…
Recreate a static graphic ad (Pinterest pin, IG/FB feed image, poster) from a reference image, swapping in a new brand's product and new copy while keeping the reference's layout, composition, and visual energy. ALWAYS generated with GPT Image 2 in edit-the-reference mode
$ npx -y skills add gooseworks-ai/goose-skills --skill remix-graphic-ad-from-reference --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/remix-graphic-ad-from-referenceContext preview
The summary Claude sees to decide when to auto-load this skill.
Recreate a static graphic ad (Pinterest pin, IG/FB feed image, poster) from a reference image, swapping in a new brand's product and new copy while keeping the reference's layout, composition, and visual energy. ALWAYS generated with GPT Image 2 in edit-the-reference mode
name: remix-graphic-ad-from-reference description: Recreate a static graphic ad (Pinterest pin, IG/FB feed image, poster) from a reference image, swapping in a new brand's product and new copy while keeping the reference's layout, composition, and visual energy. ALWAYS generated with GPT Image 2 in edit-the-reference mode (fal-ai/gpt-image-1/edit-image, a billed FAL generation); the HTML/goose-graphics overlay is only an optional text-finishing step, never the generator. The static-graphics counterpart to the video remix-ad skill; this is what the app calls when a user picks a reference ad and wants it for their own product.
Given **one reference ad image** + a **target product** + **new copy**, produce a finished static ad that keeps the reference's *layout and composition* but swaps the product and words for the new brand. This powers the app's "pick a Pinterest ad you like → get the same ad for your product" flow.
It does **not** invent layouts and it does **not** regenerate the whole scene from scratch. It reads the reference, then recreates it with GPT Image 2:
mode on the reference itself** to preserve the layout/composition and swap in the new product + copy. This is the engine for EVERY remix (premium look). FAL slug `fal-ai/gpt-image-1/edit-image`.
step: if GPT bakes garbled/misspelled copy, overlay crisp text on top of the GPT output. Never use it as the primary generator — a remix must always be generated by GPT Image 2.
| Input | Required | Notes | |---|---|---| | `reference_image` | yes | The ad to recreate (local path or URL). One image. | | `product` | yes | Target product: a clean product render/photo (PNG/webp). Pull the **real** brand asset; grounding/swapping on it is what keeps the label correct. **If the brand asset is a multi-product lineup, crop to the ONE relevant product first** — the remix grounds on a single clean product per `product_slot` (use `product_images_needed` from the slot map for how many distinct products the layout needs). | | `copy_changes` | optional | If omitted, **the agent auto-writes it** from the brand pack mapped to the template's `slot_map` (see Phase 0.5). New headline, benefit callouts, social-proof line, discount/badge text. Keep the reference's *structure* (same zones), swap the words. | | `brand` | recommended | Palette (hex), font, logo/wordmark, voice — from `get_brand_kit` / a `brand-research` pack. | | `style_source` | optional | **`template` (DEFAULT)** keeps the reference ad's palette/theme; **`brand`** recolours to the brand kit's documented palette. See "Brand grounding" below. The caller sets it (e.g. the user asks to "match my brand colours" → `brand`); absent → `template`. | | `route_hint` | optional | Engine override. Default is **always `gpt_image_2`**; `html` is only a text-overlay finishing step, never the generator. | | `aspect` | optional | Inherit from the reference; map to the renderer canvas. Default 4:5 / 1080×1350. | | `remix_spec` | optional | The precomputed spec from the template library (`slot_map` + `gen_prompt` + `remix_engine`). **If present, SKIP Phase 0 re-analysis** — the slots and prompt are already authored. This is the normal path when remixing a library template. | | `remix_mode` | from template | `product` (swap a physical product) or `ui` (SaaS/app ad — swap the app screenshot/UI, NEVER insert a product). Tagged on the template. | | `app_screenshot` | for `ui` mode | The brand's app/UI screenshot to drop into the device frame (used instead of `product` when `remix_mode:ui`). |
The brand context comes from `get_brand_kit` (structured): `colors` (palette hex), `typography`, `products[]` (with `imageUrls` + `name`/`description`), `screenshotUrls`, and `referenceImages[]` (each tagged with `productName` + `kind: "product" | "website_screenshot"`). **Read the full kit, not a preview.**
**Default to `template`. Use `brand` ONLY when the user explicitly asks** (e.g. "use/match my brand colours", "make it on-brand"). Do NOT switch to `brand` on your own judgment — keeping the reference's look is the expected default.
product image, logo, and copy/voice — NOT its colours.
(primary/accent/bg/text).
(`template`) OR the kit's documented `colors` (`brand`). Do **not** pull an accent off the logo, a mascot, a product, or "what looks nice." If `style_source: brand` but the kit has no palette, fall back to `template` (don't guess). This is the #1 off-brand failure.
`productName` matches the slot's product and `kind` is `"product"` (hero = that product's `imageUrls[0]`). Send only that product's image(s) for the slot — **not** all reference images.
`remix_mode: ui`): the hero is the brand's **app UI** — use `referenceImages` with `kind: "website_screenshot"` (i.e. `screenshotUrls`). **NEVER insert a physical product or a mascot** for a SaaS ad. If there is no screenshot, rebrand the existing UI (recolor/logo/copy).
and the layout's product slot can't be
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.