Generating Image Ads logo

Generating Image Ads

Organization
SupercmoHQ
generating-image-ads

Turns a product photo or URL into a static image ad — one image, or a set. Reads the real product first and holds it identical across every frame and ratio. Triggers: "image ad", "make an ad", "static ad", "promo graphic", "offer graphic", "sale creative", "social ad", "banner ad", "ad creative", "before/after ad", "testimonial ad". Not for generating product photography.

Overview

PublisherSupercmoHQ
RepositorysuperCMO-skills
Skill namegenerating-image-ads
Stars
260
Forks
31
Bundled files
2
LicenseApache-2.0
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 2 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by SupercmoHQ on GitHub. Read the source before you install it.

Installation

Install the Generating Image Ads AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/SupercmoHQ/superCMO-skills/tree/main/skills/generating-image-ads
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/SupercmoHQ/superCMO-skills.git /tmp/superCMO-skills
mkdir -p .claude/skills
cp -r /tmp/superCMO-skills/skills/generating-image-ads .claude/skills/generating-image-ads
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Generating Image Ads in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Generating Image Ads on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Generating Image Ads is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Image ads

Turn a product into finished static ad(s).

Workflow

Step 1: Read what you have

  • A product image or URL is available → hand it to analyzing-products, and take four things back: what the product is; how a person physically uses it — sprayed, pumped, worn, etc.; which parts open or move, and in what order; and the details that have to stay identical wherever it appears.
  • Look at the image before you describe it. Take the product only from what the image shows. Run image_analysis and ask it for everything this ad needs that the product facts leave out — how the surfaces take light, and whatever else the frame you end up building will have to describe.
  • Product not supplied → don't guess at the product. It becomes the first thing Step 2 asks for.

Step 2: Interview

Skip this entirely when the brief already makes the ad obvious — a clear product, a clear message, and nothing load-bearing missing. The interview exists to close real gaps, not to confirm what you were already told.

Otherwise ask once, bundled into a single message. Always leave a free-text way out so the user can answer off-menu. Anything this skill already settles is not a question.

Do ask, when the answer is genuinely missing:

AskWhen
The product — what it is, and whatever else identifies it: packaging, colour, distinguishing featuresNo image and no URL. Offer to wait for an upload first; a photographed product beats a described one.
Brand guidelines, if they have any — the color palette, the art direction they shoot to, anything they never put in frame, the typeface where text is drawn, and the register they want the frame to read atThe brief mentions none and the packaging doesn't imply them. Treat as optional: plenty of brands have none, so take what they give and move on.
The offer and the one claim — a discount, a launch, a benefit, the words they can stand behindThe ad has to say something and the brief doesn't say what. Only claims the user supplies are used, and used as written.
Where it runs — the placement and the ratiosThe brief doesn't say, and the placement decides the crop and the safe zones.

When the user waives questions and the product is already in hand, go straight to generating. Take a single image at 1:1, a product-hero direction, and one benefit-led line drawn from the product facts. Say in a sentence which settings you took, then keep going. It is a statement, not a checkpoint.

A missing product image is the one thing still worth raising.

Step 3: Find the idea

Read references/ad-craft.md first. Work in the discipline of the single-minded proposition: every ad resolves one tension between a consumer truth and a product truth.

  • The insight — a human truth about how a person uses or feels about this kind of product, something true enough that it feels slightly uncomfortable to say out loud. Let that truth create tension.
  • The idea — resolve the tension into one sentence describing what the ad is about. If you cannot say it in one sentence, you have two ads, not one. Where the brief carries a promotion — a price, a discount, a launch — weave it into the idea as a real element, not bolted on afterwards.
  • The treatment — only then decide how the idea becomes a single still frame: the mood, the register, the visual approach, chosen because it serves this idea. Treatment follows idea, never the other way round. It may take a familiar shape — a hero frame, a lifestyle scene, a before/after, an offer — but it is chosen to serve the idea, not picked first.

For a set, each ad works from a different insight — a different human truth, a different angle into the product — not a different visual treatment of the same insight. If two ads share an insight, you have shipped one ad twice. Nothing is generated here.

Step 4: Write the copy

Write the copy last — say only what the picture leaves unsaid. From the claims the user supplied and no others:

  • A headline — the dominant text element, always present. Could be one word, a short sentence, or a wordmark-style brand line — whatever the ad needs.
  • Support — an optional second tier of text. Use only when the headline alone leaves a real question unanswered. Most ads do not need this.
  • A call to action — an optional 2–4 word direct-response action, rendered as a button (a filled shape with the action inside, set in the accent colour — never floating text).

Every drawn string is one the brand can stand behind. Don't invent a claim, a statistic, a rating or a badge to fill the layout.

Step 5: Write the product description

Write one description of the product, and reuse it unchanged in every prompt you send.

How much to write depends on whether a photo is going with the call. With a reference attached, the photo carries identity and the description covers only what it cannot: the angle you want, the state the moving parts are in, the action being performed. With no reference, the description is all the model has, so it carries the product in full from the list below.

  • Form — shape, proportion, how it sits or stands, or whatever else pins the silhouette down.
  • Closure and moving parts — a cap, a hinge, a zip, whatever this product has, and whether the shot wants it open or shut.
  • Materials and finish, surface by surface — matte or gloss, brushed, woven, translucent or something else.
  • The action, wherever the frame has one — the specific thing being done to the product, taken from the mechanic Step 1 established rather than invented to suit the composition. Write it as the physical movement it is, and say what the product is doing at that instant: what has left it, what is about to, which part has moved, etc.

Don't transcribe what the label says. Spelling out the printing invites the model to redraw it, and redrawn text comes back warped.

Step 6: Design the ad

You read references/ad-craft.md at Step 3; hold to it here for the design it governs — the one focal point, figure-and-ground separation, where the copy sits relative to the product, the type and colour discipline, the grid and the negative space, and the safe zones each ratio has to respect.

Decide, and write down:

  • How many — one ad, or a set: the ratio family below, plus any variants the brief asked for. Each is its own separate image.
  • The ratio family — every placement ratio the ad ships in, generated natively. Where the user named no ratio or placement, deliver a single 1:1.
  • The layout — the focal point, the reading path, where each piece of copy lands, the palette and the type, held to references/ad-craft.md.

Step 7: Select the model

ModelUse it whenHow it wants the prompt
gpt-image-2the ad is a designed, text-forward layout — drawn headline, offer, callouts, a composed pageshort labelled segments on separate lines, every string quoted exactly
nano-banana-prothe ad leads on a photoreal product or a person, and carries lighter textconnected sentences in one narrative paragraph, the drawn copy quoted
seedream-5a photoreal ad another model refused or keeps failinga description leading with whatever matters most

If the user has explicitly named a model, then use that first. Call list_image_models for accepted aspect_ratio values, resolution tiers and per-model reference_images limits rather than guessing — a wrong enum fails a billed call.

Step 8: Show the concept and wait

Nothing has been generated yet, and everything after this step costs money. Get the concept approved first.

Show, written out, in one brief, to the point message:

  • The direction and the product — the angle, and the look being held.
  • The copy — the headline, offer, benefits and call to action, word for word.
  • The layout — what sits where, the format, and the ratios it ships in. Keep this to the high-level concept, not every technical detail.

Then ask whether it's right, and say plainly that they can change any of it — the direction, a line, the offer, the layout, a ratio. Expect edits. Rewrite what they change, show it again, and keep going until they approve.

Wait for an answer. Don't generate a frame.

Where the user has said they don't want to be asked, say in one line what you're going with and carry on.

Step 9: Generate

Call image_generate with a requests list, all in the same call so they render at once:

  • One object per deliverable — one per ratio in the family, one per variant the user asked for.
  • Per object: prompt; model; aspect_ratio; resolution; reference_images.
  • resolution is 1k unless the user asked for a higher tier.
  • The product photo(s) goes in reference_images every time. It holds identity; the prompt alone will not.
  • One deliverable per request. Never generate a second to compare models, to try a different look, or to correct an output you judged poor — every one of those bills again. Where the brief does ask for several — a ratio family, variants — send them as several request objects in the one call.
  • Don't run a vision or analysis call on the image you just generated. Judging your own output is not part of this workflow: it costs another call, and anything it finds you are not permitted to act on. Hand the result to the user and let them decide.
  • An unanswered question is not a yes. If you ask whether to regenerate and no answer comes back, the answer is no — deliver what you have and say what you would have changed. A run with nobody watching cannot consent to being billed twice.
  • Call list_image_models for accepted aspect_ratio values, resolution tiers and per-model reference_images limits rather than guessing — a wrong enum fails a billed call.

Images are polled for you, but a heavy one can come back as {status: "pending", …}. That is a job handle, not a failure. Pass that exact handle to job_status to retrieve the finished image, and if it comes back pending again, call job_status again with the same handle. Never re-run a pending image through image_generate: that abandons the job you are already paying for and starts a second, separately billed one.

Step 10: Return

Share the image URLs and local file paths, once every frame has finished — never a partial set. For a set, present them in the order you outlined.

Common mistakes

  • Filling the layout with an invented claim, rating or badge the user never supplied.
  • Letting copy cross the product's focal area instead of sitting in the space it leaves.
  • Carrying more than one message, so nothing lands.
  • Placing the call to action where the platform's own button sits, so it is covered in-feed.
  • Skipping the interview when something load-bearing is missing.
  • Naming a brand, a photographer or a competitor in the prompt in place of describing the look.
  • Re-running a rejected frame without first finding out what was wrong with it.

Edge cases

Never regenerate a deliverable without the user asking. Every re-run is billed again. Hand back what came out, say what looks wrong, and wait — including in the cases below.

  • No product supplied, and the user wants to proceed anyway — ask for the product first; an ad for an invented product held across a family is worse than stopping.
  • The image came back not as intended — the drawn text warped, a look you didn't ask for → deliver it anyway and say what you think is off. For warped or misspelled text, quote the copy exactly, cut the amount, raise the resolution, and route to gpt-image-2. Do not regenerate on your own judgement: a second generation bills again, and the user may be happy with the first.
  • One deliverable in the batch fails while the others succeed — send a new call with only that request. Re-running the whole list bills every one again.
  • A rejection that names no reason → ask what missed before re-running, with options drawn from the direction you just built, plus free text. A blind re-run bills again and lands elsewhere at random.
  • Safety or policy rejection → name a workable stand-in and resubmit; on a second, try another model from Step 7; on a third, say which element is blocked rather than retrying blind.
  • reference_images rejected on count → the error states the limit; drop to it.
  • The user changes something after approving the concept — redo from the earliest step the change touches. A different direction or layout means a new design; a different line means only the copy and the prompt; a different ratio means only that object.
  • The brief is a plain product photograph with no ad message → generating-product-photos. A video ad → generating-ad-videos. General artwork or a poster not selling a product → generating-images. Route out rather than forcing it into an ad.
  • error: "no_provider_configured" on any tool → relay the tool's hint (the user must set their key).

Reference

  • references/ad-craft.md — the design craft, read at Step 3 and held to the final frame: the single-minded proposition, the focal point, figure and ground, visual hierarchy, type and colour, the grid and negative space, the ratio family, the safe zones per placement, brand anchors, the anti-patterns, the compliance lens, keeping the product real, and how the prompt is assembled.

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Generating Image Ads AI skill do?

Turns a product photo or URL into a static image ad — one image, or a set. Reads the real product first and holds it identical across every frame and ratio. Triggers: "image ad", "make an ad", "static ad", "promo graphic", "offer graphic", "sale creative", "social ad", "banner ad", "ad creative", "before/after ad", "testimonial ad". Not for generating product photography.

Why use Generating Image Ads on TypingMind?

Because you install it once and use it with any model. Generating Image Ads is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Generating Image Ads in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/SupercmoHQ/superCMO-skills/tree/main/skills/generating-image-ads. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Generating Image Ads?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Generating Image Ads?

As many as you like. As long as a model supports skills, you can use Generating Image Ads with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Generating Image Ads AI skill free?

Yes. It is published on GitHub by SupercmoHQ under the Apache-2.0 license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇