remix-graphic-ad-from-reference
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.
Install / Use
npx skills add gooseworks-ai/goose-skills --skill remix-graphic-ad-from-referenceInstalls into whichever agent you are using.
SKILL.md
Installable skill definition
Quality Score
Category
AI & Machine LearningSupported Platforms
Our assessment of remix-graphic-ad-from-reference
remix-graphic-ad-from-reference scores 86/100 on our quality scale, 563rd of 952 AI & Machine Learning skills we index.
Its SKILL.md is 19 KB long, well organised into 21 sections and no code examples: a thorough specification that gives an agent plenty to work with.
With 1,222 GitHub stars, it is one of the more widely adopted skills in the catalogue.
Maintenance, license and trust
- The repository was last updated 33 days ago, so remix-graphic-ad-from-reference is actively maintained.
- Our last check on 2026-10-11 found the source still online.
- It is released under the MIT license, a permissive license that allows use, modification and commercial use with attribution.
- Its trust signals score 100/100, with no cautions. These come from repository metadata, not a code audit β read the skill file before letting an agent act on it.
remix-graphic-ad-from-reference compared with similar skills
All 4 of these similar skills score higher than remix-graphic-ad-from-reference; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| remix-graphic-ad-from-reference (this skill)by gooseworks-ai | 86 | 1.2k | 33d ago | SKILL.md |
| claude-memby thedotmack | 100 | 103.1k | today | CLAUDE.md |
| taste-skillby Leonxlnx | 100 | 102.4k | today | CLAUDE.md |
| Understand-Anythingby Egonex-AI | 100 | 88.2k | 3d ago | CLAUDE.md |
| headroomby headroomlabs-ai | 100 | 77.8k | 1d ago | CLAUDE.md |
Frequently asked questions
- How do I install remix-graphic-ad-from-reference?
- Run
npx skills add gooseworks-ai/goose-skills --skill remix-graphic-ad-from-reference. The install tabs above show the steps for each supported agent. - Which AI agents does remix-graphic-ad-from-reference work with?
- It is written for Universal, as a SKILL.md file. Other agents that read the same format can often use it too.
- Is remix-graphic-ad-from-reference safe to use?
- It is MIT-licensed and scores 100/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is remix-graphic-ad-from-reference still maintained?
- The repository was last updated 33 days ago, so remix-graphic-ad-from-reference is actively maintained.
Skill content
View source on GitHubname: 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.
remix-graphic-ad-from-reference
Purpose
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:
- GPT Image 2 (edit the reference) β ALWAYS use this as the generator. Run it in image-edit
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. - HTML overlay (goose-graphics) β NOT a generation engine. It is only an optional FINISHING 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.
Inputs
| 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 brand_read (section 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). |
Brand grounding β read the kit, never improvise (do this before generating)
The brand context comes from brand_read with section 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.
Palette β by style_source (default template)
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.
template(default): keep the reference ad's colours/theme; the brand contributes only its product image, logo, and copy/voice β NOT its colours.brand(only on explicit user request): recolour the layout to the brand kit'scolors(primary/accent/bg/text).- NEVER invent a colour. Every colour in the output must come from EITHER the reference
(
template) OR the kit's documentedcolors(brand). Do not pull an accent off the logo, a mascot, a product, or "what looks nice." Ifstyle_source: brandbut the kit has no palette, fall back totemplate(don't guess). This is the #1 off-brand failure.
Which image to feature β select from the kit, send ONLY the relevant one(s)
- Physical-product brand: the hero is the brand's product. Pick from
referenceImageswhereproductNamematches the slot's product andkindis"product"(hero = that product'simageUrls[0]). Send only that product's image(s) for the slot β not all reference images. - SaaS / software / app brand (
brandTypeβ saas/software/service/app/platform, orremix_mode: ui): the hero is the brand's app UI β usereferenceImageswithkind: "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). - Don't substitute a mascot/logo for the product unless the brand genuinely has no product/app image and the layout's product slot can't be filled β and if so, say so to the user, don't silently swap.
Composed Atoms
goose-graphics(skills/shared/goose-graphics) β renders the HTML-overlay path to PNG via the goose-graphics Playwright pipeline.create-image-gpt-image-fal(skills/video/create-image-gpt-image-fal) β GPT Image 2, run in edit mode on the reference for the photographic path.goose-product-photosβ OPTIONAL: when no clean product render exists, generate one with thegoose-product-photosskill (GooseWorks product photos), ask before spending credits, and use only a result the user approves.
Workflow
Phase 0 β Get the spec (use remix_spec if it exists; analyze only if it doesn't)
If the template carries a remix_spec (every library template does), DO NOT re-analyze the image.
Read it directly:
remix_spec.slot_map.text_slotsβ the text fields to replace (each hasid,role, and the reference's current text). Map the brand'scopy_changesonto these slots byid/role.remix_spec.slot_map.product_images_needed+product_slotsβ how many brand product images to ask for and where each goes. Cut each out withscripts/cutout_product.py.remix_spec.slot_map.logo_slots/decorationsβ logo placement + arrows/badges to reproduce.remix_spec.gen_promptβ the ready, real-product-locked GPT prompt (fill its{{placeholders}}).remix_spec.remix_engineβ the engine to use (skip Phase 1 routing).
Only if there is no remix_spec (a brand-new, un-tagged reference): view it at full res and write a
one-paragraph anatomy (background, product placement, every text zone, palette, font) β i.e. produce a
remix_spec on the fly. Prefer running the template through the triage tagger first so this is cached.
Phase 0.5 β Author the copy (agent auto-writes; user can revise)
If copy_changes is supplied, use it. Otherwise the agent writes it β read the brand pack
(voice/tone, value-props, never-say) and map onto remix_spec.slot_map.text_slots: one on-brand line
per slot, matching each slot's role and keeping length close to the reference's current text so it
fits the layout. Respect never-say / no-competitor / no-unverifiable-claims. Write one line for every text slot the reference has (no more, no fewer) β these fill the gen_prompt {{text_slots}} block. Add no text the reference doesn't have, drop none it does; if an area has no text in the reference, add none. The output is an exact copy of the reference differing only in product, theme/colour, and the words.
Versioning: show the drafted copy; on user feedback, regenerate a v2 (re-author the copy β re-render)
rather than editing pixels. Keep each version.
Phase 1 β Engine (ALWAYS GPT Image 2)
Always generate with GPT Image 2 (fal-ai/gpt-image-1/edit-image, edit-the-reference mode) β go straight to Phase 2B. Do NOT use the HTML-overlay path as the generator, and ignore remix_spec.remix_engine even if it says html β every remix is generated by GPT Image 2 (this is a billed FAL generation via the proxy). Phase 2A (HTML/goose-graphics) is ONLY an optional text-overlay finishing step if GPT bakes wrong copy.
Phase 2A β HTML-overlay (OPTIONAL text-overlay finishing only β NOT the generator)
- Cut the product out to a transparent PNG with
scripts/cutout_product.py(handles palette-transparency renders and white/solid backgrounds via edge flood-fill β preserves interior white logos). - Build one
index.htmlfromassets/overlay-template.html: reproduce the reference's background, place the cutout, lay the new copy in the same zones. Arrows = inline SVG; scalloped seals = inline JS (template has both). Use the brand font (Google Fonts) + palette. - Render via the
goose-graphicsskill's screenshot pipeline:node <goose-graphics>/screenshot/screenshot.js --format <canvas> --input index.html --output render.png --font-delay 1500. Map aspectβcanvas: 1080Γ1080βcarousel, 1080Γ1350βposter, 1080Γ1920βstory. 2:3 (1080Γ1620) has NO goose-graphics preset β render atposter(1080Γ1350, nearest) or a standalone 2:3 Playwright canvas; don't hand-edit the vendored renderer.
Phase 2B β GPT Image 2 path (EDIT the reference, do not regenerate)
- Run GPT Image 2 in image-edit mode with the reference ad as the base + the product render β prompt it to keep the reference's layout, background, camera, lighting, and signature element exactly and only (a) replace the product with the attached one (match its label/logo exactly) and (b) clear the original text. β οΈ Never generate grounded on the product alone β that invents a generic new scene and discards the reference's composition.
- Text: either let GPT render the new SHORT copy, or have it leave clean space and add copy via the HTML overlay. Never stack an HTML text layer on output that already has baked text β one source.
--aspect_ratio 3:4(or nearest),--quality high --resolution 2k. If the model returns a small image (long edge < ~1080px), upscale to β₯2k before shipping β AI-path baked text softens at low res (a known tradeoff vs the HTML path, which is natively 2Γ/crisp). GPT edit slug:fal-ai/gpt-image-1/edit-image(image_urls[]); it caps ~1536px long edge, so upscale to β₯2k viafal-ai/esrgan.- Fidelity gate (3 checks, all must pass): (a) signature element/layout preserved; (b) EVERY instance of the source product is replaced and NO source/competitor brand name, logo, or label survives anywhere in frame (diff full-res output vs reference β a partial swap that leaves a competitor bottle is a brand/ compliance hazard); (c) output is full-res (long edge β₯ ~2000px) and baked text is sharp. If any fails: re-roll GPT on the original reference, or (for text-only failures) overlay the text via goose-graphics on top of the GPT image. Reject only if GPT can't preserve the layout at all β never swap to
Truncated for display β read the full file on GitHub.
Related Skills
claude-mem
103.1kPersistent Context Across Sessions for Every Agent β Captures everything your agent does during sessions, compresses it with AI, and injects relevant context back into future sessions. Works with Claude Code, OpenClaw, Codex, Gemini, Hermes, Copilot, OpenCode + More
taste-skill
102.4kAgent skills that give coding agents taste: art direction, reference images and a browser check instead of generic AI pages
Understand-Anything
88.2kGraphs that teach > graphs that impress. Turn any code into an interactive knowledge graph you can explore, search, and ask questions about. Works with Claude Code, Codex, Cursor, Copilot, Gemini CLI, and more.
headroom
77.8kCompress tool outputs, logs, files, and RAG chunks before they reach the LLM. 20% fewer tokens for coding agents, 60-95% fewer tokens for JSON, same answers. Library, proxy, MCP server.
Languages
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit β see the Safety scan above for what the skill file itself contains.
