Install
$ agentstack add skill-krusemediallc-arcads-claude-code-image-ad-clone ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ● Environment & secrets Used
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
image-ad-clone (Arcads)
Take an existing image ad and turn it into a reusable, parameterizable prompt template that gets appended to the shared 37-template image-ad library. The template is validated by round-tripping through one of the Arcads image-ad generators — ChatGPT Image 2 (typography / UI-mimicry templates) or Nano Banana (photoreal / lifestyle / multi-reference templates).
This skill replaces the older Uni1-locked image-ad-clone (which only worked with Luma uni-1). It's backend-agnostic: at Phase 1 the agent asks you (or auto-detects from the reference) whether to validate against gpt-image-2 or Nano Banana, then routes through the matching generator script in this repo.
Read order
- This file — Arcads-specific generator paths, model-choice decision, what's locked at the per-repo layer.
- [shared/skills/image-ad-clone/prompting/guide.md](../../shared/skills/image-ad-clone/prompting/guide.md) — the full model-agnostic 10-phase workflow (visual analysis → draft prompt → generate-with-reference → iterate → generalize → test → cross-model validate → document → save).
- [shared/skills/image-ad-prompting/prompting/template-format.md](../../shared/skills/image-ad-prompting/prompting/template-format.md) — entry skeleton.
- [shared/skills/image-ad-prompting/prompting/prompt-library.md](../../shared/skills/image-ad-prompting/prompting/prompt-library.md) — destination for the new entry. 37 validated templates already there; new entries go at T40+.
Hard rules
Inherits all 6 hard rules from the shared guide (strip platform chrome, validate by generating, test the generalized version, no brand-specific text in the final template, never silently overwrite, document model notes for both backends). Plus per-repo:
- Backend is one of: ChatGPT Image 2 OR Nano Banana on Arcads. Never uni-1. The script choice happens in Phase 1 once the user picks (or the agent auto-detects).
Picking the right backend in Phase 1
Pick by what the reference ad is showing — most templates fall into one clear bucket.
Use chatgpt-image-ad (gpt-image-2) when the reference is:
- Typography-heavy / UI mimicry (Apple Notes lists, fake Google search, fake Slack threads, ChatGPT-conversation ads, iMessage screenshots, comparison tables, fake AirDrop dialogs, Hinge-style cards, calendar UI, weather forecast UI, magazine masthead)
- Brutalist / editorial typography heros (huge type makes the joke)
- Dense small text inside UI elements
Use nano-banana-image-ad (Nano Banana family) when the reference is:
- Photoreal handheld objects (whiteboards, napkins, sticky notes, letter boards, scratch-off tickets)
- Aspirational lifestyle photography (sunset, kitchen at golden hour, OOH / transit)
- Multi-image reference blending (logo + product + style + character all in one)
- Clay / claymation / Pixar-adjacent textures
If the reference straddles both (e.g. a UGC-style photo with rendered text overlays), the safer default is to clone twice — once per backend — and ship the template with Model notes saying which renders cleaner. The agent will offer this in Phase 8.
If the user explicitly says "clone this with gpt-image-2" or "with Nano Banana", honor that.
Dependencies
This skill uses the matching generator script in the SAME repo:
- For gpt-image-2 validation:
skills/chatgpt-image-ad/scripts/generate_image.py(locked tomodel: gpt-image-2) - For Nano Banana validation:
skills/nano-banana-image-ad/scripts/generate_image.py(nano-banana-2default;--model nano-banana-proornano-banana-editopt-in)
Fail Phase 1 with a fix-it message if neither generator is installed in this repo.
Also required:
.envwithARCADS_BASIC_AUTHorARCADS_API_KEY- (Optional)
PRODUCT_IDin.env— if not set, the generator auto-fetches the first Arcads product - Python 3.12+
Where this skill's generator lives
When the [shared guide](../../shared/skills/image-ad-clone/prompting/guide.md) Phase 1 tells you to locate the companion generator, look here in order based on the model choice:
For gpt-image-2:
~/.claude/skills/chatgpt-image-ad/scripts/generate_image.py/skills/chatgpt-image-ad/scripts/generate_image.py- If neither: stop and ask the user to install
chatgpt-image-adfirst.
For Nano Banana:
~/.claude/skills/nano-banana-image-ad/scripts/generate_image.py/skills/nano-banana-image-ad/scripts/generate_image.py- If neither: stop and ask the user to install
nano-banana-image-adfirst.
Aspect ratio mapping
The Arcads image endpoint (/v2/images/generate) accepts only 1:1, 16:9, 9:16 — regardless of which model (gpt-image-2 or nano-banana) you're hitting. When measuring the original ad's aspect (Phase 2):
4:5,2:3,5:4ads → render at1:1and post-crop in your downstream ad-builder skill1.91:1ads → render at16:9and post-crop9:16ads → native, no change
Document the ratio fallback in the template's Aspect ratio: field so future users know they're rendering at a mapped ratio, not the original.
(The KIE per-API repo's image-ad-clone skill supports a broader native ratio set — 4:5, 2:3, 3:2, etc. — because KIE's /jobs/createTask Nano Banana endpoint accepts them. If aspect-ratio fidelity matters more than Arcads-specific control, consider the KIE repo for that template.)
Workflow phases (model-agnostic, see shared guide for full detail)
- Phase 1: Preflight + model choice. Reference image file resolves;
.envhas Arcads creds; both generators detected. Ask the user which model to validate against (or auto-detect from the reference's typography-vs-photo balance). - Phase 2: Visual analysis. Describe the reference structurally — aspect ratio, format type, layout, typography, color palette, photography style, every text string verbatim, decorative elements, chrome to strip.
- Phase 3: Draft v1 prompt (brand-specifics intact).
- Phase 4: Generate with reference using the matching generator script. Pass
--image-refand the matched aspect ratio. - Phase 5: Compare and iterate. Refine prompt based on deltas. Cap 4 iterations.
- Phase 6: Generalize into placeholders (
{brand.name},{brand.color_primary}, etc.). - Phase 7: Test the generalized template against a DIFFERENT brand. Regenerate. If structure breaks, refine placeholder set.
- Phase 8: Cross-model validation (recommended). Run the same template through the OTHER backend in this repo. Document deltas in the
Model notesblock. - Phase 9: Document the template. Use the format in
template-format.md. Required fields: tag, when-to-use, aspect ratio, reference image guidance, variable schema, template prompt (full validated), example fill, Model notes for both backends, validated example path. - Phase 10: Save and confirm. Append to
shared/skills/image-ad-prompting/prompting/prompt-library.md. Print path. Move PNGs to permanent iteration dir.
Iteration directory layout
/iterations/clone-2026-05-26/
T40-lifestyle-hero/
prompt.txt
v1.png, v2.png, … # against the source ref (chosen backend)
test-fill-v1.png, … # Phase 7 generalization test against a different brand
cross-{other-backend}/v1.png # Phase 8 cross-model validation (optional)
notes.md
Common Model notes patterns to write in Phase 9
**Model notes:**
- **gpt-image-2:** {observed behavior — e.g. "clean — strong on UI mimicry and table text", "tends to add a 4th Slack message — keep prompt explicit about exactly N", "small chart axis labels blur — bump font size feel"}
- **nano-banana:** {observed behavior — e.g. "strong — preferred backend for handheld board photos", "character identity drifts across variants on -2; use -pro to lock", "weak on dense table text — keep rows to 4 max"}
If you only validated against one model in Phase 8, say so explicitly:
**Model notes:**
- **gpt-image-2:** validated clean (see iteration path)
- **nano-banana:** untested — validate before using on nano-banana-image-ad backend
The diff between a uni-1-era library and this one is this Model notes block. Don't skip it — it's the difference between a portable template and one nobody knows how to use.
See also
- [shared/skills/image-ad-clone/prompting/guide.md](../../shared/skills/image-ad-clone/prompting/guide.md) — full 10-phase workflow
- [shared/skills/image-ad-prompting/OVERVIEW.md](../../shared/skills/image-ad-prompting/OVERVIEW.md) — ecosystem context
- [chatgpt-image-ad skill](../chatgpt-image-ad/SKILL.md) — gpt-image-2 generator (used for validation when you pick that backend)
- [nano-banana-image-ad skill](../nano-banana-image-ad/SKILL.md) — Nano Banana generator (used for validation when you pick that backend)
- [arcads-external-api skill](../arcads-external-api/SKILL.md) — Arcads conventions (session folder, credit cost confirmation, presigned-upload flow)
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: krusemediallc
- Source: krusemediallc/arcads-claude-code
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.