Install
$ agentstack add skill-krusemediallc-arcads-claude-code-nano-banana-image-ad ✓ 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 Used
- ✓ 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
nano-banana-image-ad (Arcads)
Generate one or more standalone Meta ad image creatives via Arcads' POST /v2/images/generate with the Nano Banana model family (default nano-banana-2). Hands the image paths off to your Meta-ad-builder skill — this skill does not upload to Meta itself.
Read order
- This file — Arcads-specific endpoint, auth, presigned upload flow, workflow phases.
- [shared/skills/nano-banana-image-ad/prompting/guide.md](../../shared/skills/nano-banana-image-ad/prompting/guide.md) — model-specific prompting (what Nano Banana is good/bad at, when to switch to gpt-image-2).
- [shared/skills/image-ad-prompting/prompting/prompt-library.md](../../shared/skills/image-ad-prompting/prompting/prompt-library.md) — 30+ validated templates with per-model notes.
- [shared/skills/image-ad-prompting/prompting/safety-suffixes.md](../../shared/skills/image-ad-prompting/prompting/safety-suffixes.md) — the 3 always-on guards.
- [scripts/generateimage.py](scripts/generateimage.py) — the helper script (Python stdlib only).
Hard rules — never relax
- Model is in the Nano Banana family. The script accepts
nano-banana-2(default),nano-banana-pro(Gemini 3 Pro Image, higher cost / locked identity),nano-banana-edit(inpaint-focused), ornano-banana(legacy). Anything else is refused. If the user asks for gpt-image-2, point them atchatgpt-image-ad. - No platform/screenshot chrome in output.
NO_CHROME_SUFFIXis always on (override only with--allow-chrome). - Edge-safe + glyph-safety suffixes always on unless
--no-safe-zoneis explicit. - Max 14 reference images. Hard Arcads cap for Nano Banana. Script enforces.
- No Meta upload from this skill. Image generation only. The user has a separate ad-builder skill in their stack — hand off via filesystem paths.
- Always present a credit-cost estimate before generating. Each Nano Banana call is one image; multiply by
--n.nano-banana-procosts more thannano-banana-2— surface the per-model rate fromlogs/arcads-api.jsonl.
Prerequisites
.envcontainingARCADS_BASIC_AUTH(preferred) ORARCADS_API_KEY- Optional:
PRODUCT_ID,PROJECT_IDin.envfor session-folder organization - Reference images on local disk. The script handles the Arcads presigned-upload flow internally.
Configuration
- Base URL:
https://external-api.arcads.ai(orARCADS_BASE_URL). - Auth: HTTP Basic. The script prefers a pre-encoded
ARCADS_BASIC_AUTH; falls back to encodingARCADS_API_KEY. - Endpoint:
POST /v2/images/generate; pollGET /v1/assets/{id}untilstatus: generated. - Reference uploads:
POST /v1/file-upload/get-presigned-urlreturns{presignedUrl, filePath};PUTbytes topresignedUrl; pass thefilePathinreferenceImages. Single-use — re-uploaded fresh per variant by the script.
Generation modes
| Mode | When to use | Required | Optional | |---|---|---|---| | image (default) | Brand-new ad image. | --prompt, --aspect-ratio | --image-ref (up to 14) | | image_edit | Modify a --source image. | --prompt, --source | --image-ref (up to 14) |
Supported aspect ratios
1:1, 16:9, 9:16. Only these three are accepted by Arcads' /v2/images/generate endpoint (the same endpoint serves gpt-image-2 and Nano Banana — same ratio constraints). Templates in the shared library that use 2:3, 4:5, 3:2, etc. won't render at their native ratio on this backend — fall back to 1:1 and post-crop, or use the KIE nano-banana-image-ad sibling which supports the full Meta ratio set natively via the /jobs/createTask endpoint.
Model variants (--model)
nano-banana-2(default) — Gemini 2.5 Flash Image. The standard. Use for most templates.nano-banana-pro— Gemini 3 Pro Image. Use for hero stills, character continuity across runs, material-realism critical shots (claymation, Pixar, premium product photography). Costs more credits.nano-banana-edit— inpaint-focused. Use only with--mode image_editfor tight masked edits (swap background, change object color).nano-banana— legacy. Use only if the user explicitly asks; new work should usenano-banana-2.
Ask the user which variant they want before the first generation in a session if the value isn't already set in MASTER_CONTEXT.md. Default to nano-banana-2.
Workflow
Phase 1: Preflight
.envexists with credentials.- (Optional)
arcads-external-apisession folder set up. - Health-check:
curl -sf -H "$AUTH" "$BASE_URL/v1/products"returns 200.
Phase 2: Gather inputs
Collect: seed prompt, mode, source (if edit), reference paths (up to 14), variant count, aspect ratio, model variant.
Phase 3: Prompt rewrite
Read [shared/skills/image-ad-prompting/prompting/prompt-library.md](../../shared/skills/image-ad-prompting/prompting/prompt-library.md). If the user's brief matches a template, check the Model notes block — only proceed if nano-banana is marked clean, preferred, or strong. If gpt-image-2 is preferred, suggest switching skills.
Fill {placeholders} and show the user the rewritten prompt. Ask for approval before generating.
For fresh prompts (no template match), follow the structure in [shared/skills/nano-banana-image-ad/prompting/guide.md § Phase 3b](../../shared/skills/nano-banana-image-ad/prompting/guide.md) — lean on Nano Banana strengths (named reference roles, lighting specifics, material specifics).
Phase 4: Credit cost confirmation (MANDATORY)
Present the estimated credit cost (read from logs/arcads-api.jsonl for matching past calls). Surface the model variant prominently: nano-banana-pro costs more than nano-banana-2. Wait for explicit confirmation.
Phase 5: Generate
~/.claude/skills/nano-banana-image-ad/scripts/generate_image.py \
--prompt "" \
--aspect-ratio \
--n \
--image-ref \
[--image-ref ] \
[--image-ref ] \
--out ./generated \
--env-file .env
# For higher-stakes hero shots:
~/.claude/skills/nano-banana-image-ad/scripts/generate_image.py \
--model nano-banana-pro \
--prompt "" \
--aspect-ratio \
--n \
--image-ref \
--out ./generated \
--env-file .env
# For an edit run (inpaint):
~/.claude/skills/nano-banana-image-ad/scripts/generate_image.py \
--mode image_edit \
--model nano-banana-edit \
--prompt "" \
--source \
[--image-ref ] \
--n \
--out ./generated \
--env-file .env
Each line on stdout is one JSON variant (variant, path, asset_id, width, height, prompt, mode, aspect_ratio, model).
Log each call to logs/arcads-api.jsonl with the model variant, ref count, and returned asset_ids.
Phase 6: Visual QA (MANDATORY)
For each completed variant, read the image and inspect for:
- Garbled small text (the main Nano Banana weakness)
- Extra fingers / wrong limb count (common Gemini-family failure)
- Wordmark drift (always pass brand wordmarks as
--image-refto mitigate) - Character identity drift across variants (use
nano-banana-proto lock identity if it matters)
If defects: regenerate with a revised prompt that explicitly corrects the issue (see [shared/skills/nano-banana-image-ad/prompting/guide.md § Retry mode](../../shared/skills/nano-banana-image-ad/prompting/guide.md)). Cap at 2 retries per variant.
Phase 7: Confirm and hand off
Show all paths to the user. Ask "Use all / use these specific ones / regenerate / cancel."
Selected variants are ready for your Meta-ad-builder skill. Print the paths.
Optionally, write the selected paths to ./generated/run-.jsonl for downstream consumption.
Out of scope — fail clearly
- Meta upload — different skill in your stack.
- ChatGPT Image 2 / gpt-image-2 generation — use
chatgpt-image-ad. - Video, carousel, DCO ads — image only.
- Ad copy writing — different skill.
- Editing the shared prompt library — use
image-ad-clone(asks which backend at Phase 1).
Common errors
- 401/403 → fix
.env. - 422 validation/moderation → tighten prompt; check
aspectRatiois in supported set; check--n≤ 5. - 500 UNKNOWN_ERROR → usually a stale presigned filePath. The script re-uploads per variant; if persistent, file an issue with the
asset_id.
Files this skill owns
~/.claude/skills/nano-banana-image-ad/SKILL.md— this file~/.claude/skills/nano-banana-image-ad/scripts/generate_image.py— Arcads Nano Banana caller
See also
- [shared/skills/nano-banana-image-ad/prompting/guide.md](../../shared/skills/nano-banana-image-ad/prompting/guide.md) — model-specific prompting
- [shared/skills/image-ad-prompting/prompting/prompt-library.md](../../shared/skills/image-ad-prompting/prompting/prompt-library.md) — shared template library
- [image-ad-clone skill](../image-ad-clone/SKILL.md) — single backend-agnostic skill that reverse-engineers an existing ad into a reusable library entry
- [arcads-external-api skill](../arcads-external-api/SKILL.md) — underlying Arcads conventions
- [chatgpt-image-ad skill](../chatgpt-image-ad/SKILL.md) — sibling skill for typography-heavy / UI-mimicry templates
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.