---
name: eggapi-ad-creatives
description: Produce batches of ad creatives with EggAPI - several concepts built on different angles, each adapted to every placement size, optional short video ads, and a manifest for A/B testing. Use when the user wants ad images, banner, feed or story creatives, ad variants, campaign visuals or short video ads for Meta, TikTok, Google, YouTube, Douyin or Xiaohongshu (广告素材、投放素材、信息流广告、A/B 测试).
---

# Ad creative batches

Turn a brief into several ad concepts, each delivered in every placement size the campaign needs, so the user can upload them and A/B test. Reply in the user's language. Write model prompts in English; put any text that should appear in an image in quotes, in its target language.

## EggAPI basics

This skill uses the EggAPI MCP server, usually added under the name `eggapi`: `list_models`, `generate_image`, `generate_video` and `get_task` (in Claude Code they show up as `mcp__eggapi__*`). If these tools are missing, stop and send the user to https://eggapi.ai/connect to add the server.

- **Models.** Call `list_models` once at the start. Use the model IDs this skill names when they are listed; otherwise pick the closest model with the same `generation_type`. `unit_price_usd` is the price per image, or per second of video; `unit_price_by_resolution` overrides it for a given `resolution`.
- **Local files.** The generate tools only accept public `http(s)` URLs. Upload local files first (up to 20 MB per image):

  ```bash
  curl -sS https://api.eggapi.ai/v1/uploads \
    -H "Authorization: Bearer $EGGAPI_API_KEY" \
    -F "files[]=@./photo-1.jpg" -F "files[]=@./photo-2.jpg"
  ```

  The URLs are in `data.files[].url`. If `EGGAPI_API_KEY` is empty in the shell, ask the user to export it; never ask for the key in the chat. Uploaded files can be opened by anyone who has the URL, so say so before uploading anything private.
- **Tasks are async.** `generate_image` and `generate_video` return a `task_id` at once. Submit every independent task first, then poll `get_task` for each until `done` is true: every 5-10 s for images, 10-15 s for videos (usually 1-3 min). If a generate call already returns `urls`, no polling is needed.
- **Always pass** `aspect_ratio` (the default is 16:9) and, for video, `duration` (4-15 s). Supported ratios: `1:1`, `3:4`, `4:3`, `9:16`, `16:9`, `21:9`.
- **Edit models return one image per call.** For more variants, call again; `num_outputs` only applies to text-to-image models.
- **Output URLs work as inputs.** Pass a finished image's URL straight into the next edit or video call; no re-upload needed.
- **Save everything.** Download each output into `eggapi-output/<project>/` under the current directory with `curl -sSL -o <file> <url>`, keeping the extension from the URL and using descriptive file names.
- **Cost.** Show the plan with an estimated cost before generating and wait for a go-ahead, unless the user already said to go ahead. At the end, report each task's `cost` and the total.
- **Errors.** `insufficient balance`: ask the user to top up at https://eggapi.ai/dashboard. `temporarily unavailable`: switch to another model of the same type. A `failed` task: read `error`, adjust the prompt if it points at the content, and retry once.

## 1. Brief

Ask only for what is missing:

- **What is advertised** and the offer (discount, free trial, launch, bundle).
- **Audience**, and the one action the ad should drive (buy, sign up, install, visit).
- **Placements** (see the table in step 3).
- **Brand assets**: product photos, logo file, brand colors as hex codes, the overall tone. Whether headlines go on the images.
- **Volume**: how many concepts (default 3) and whether to include video ads.

## 2. Write the concepts and confirm

Write the concepts before generating anything. Give each one a different angle, for example pain point, main benefit, social proof, offer and urgency, before/after, or aspiration. For each concept list:

- angle
- headline: under 6 words or 12 Chinese characters
- visual: one sentence on what the image shows
- call to action

Show the concepts as a table, together with the placement list and the estimated cost (concepts x placements x image price, plus video seconds x price per second). Users often rewrite headlines here; wait for the go-ahead.

## 3. Placement sizes

| Placement | Aspect ratio |
| --- | --- |
| Meta / Instagram feed, TikTok and Douyin feed images, Google display square | 1:1 |
| Stories, Reels, TikTok, Douyin, YouTube Shorts | 9:16 |
| YouTube, landscape display, website hero | 16:9 |
| Xiaohongshu | 3:4 |
| Wide banners | 21:9 |

For 9:16 creatives, keep the headline and the product out of the top 15% and the bottom 25% of the frame, where the app's interface covers it.

## 4. Generate

For each concept:

1. **Key visual** in the concept's main placement ratio, at `resolution: "2k"`.
   - With product photos or a logo: an edit model with them as `images`. Default `google/nano-banana-pro/edit`, alternative `bytedance/seedream-v5.0-pro/edit` (both up to 8 input images). Start the prompt with "Keep the product exactly as in the reference photos: same shape, colors, logo and label text."
   - Without any assets: text-to-image, `google/nano-banana-pro/text-to-image` or `bytedance/seedream-v5.0-pro`.
2. **Every other placement**: call the same edit model with the approved key visual (plus the product photos) as `images`, the placement's `aspect_ratio`, and the prompt "Recompose this ad for a {ratio} format: keep the same subject, style, colors and headline; extend the background instead of stretching or cutting off the subject." This keeps all sizes of one concept consistent.
3. **Headlines**: put the exact text in quotes, say where it sits ("in a solid band across the bottom", "top left, large bold sans-serif") and name the color. If the text still comes out wrong after one retry, regenerate without text, leave a clear area for it, and tell the user to set the text in their design tool.
4. **Logos**: models redraw logos imperfectly. Leave a clear corner for the logo and, if ImageMagick or ffmpeg is installed, offer to place the user's real logo file on the finished images.

Submit all concepts' key visuals together, review them with the user, then submit all the resizes together.

## 5. Video ads (optional)

Animate the approved 9:16 key visual of each concept with `generate_video`:

- Model: `bytedance/seedance-2.5/image-to-video`; alternative `alibaba/wan-3.0/image-to-video`.
- `image`: the key visual's URL. `aspect_ratio`: `9:16`. `duration`: 5-8. `resolution`: `720p` for a test round, `1080p` for the final.
- Prompt one clear motion that catches the eye in the first second: a product reveal, a quick push-in, the before/after change. Text tends to break up in motion, so add captions afterwards in an editor.
- Add `parameters: {"generate_audio": true}` only when the user wants sound.

## 6. Check and deliver

If you can view images, check every file: the product matches the photos, the headline is spelled exactly as approved, nothing important sits in a 9:16 interface zone. Regenerate once what fails, and say which files were re-run.

Save to `eggapi-output/<campaign-slug>/` with names like `c1-painpoint-1x1.png`, `c1-painpoint-9x16.png`, `c2-offer-16x9.png`, `c1-painpoint-9x16.mp4`. Also write `manifest.csv` there with the columns `file,concept,angle,headline,cta,placement,aspect_ratio,model,cost`, one row per file, so the user can set up A/B tests and track which angle wins. Finish with the list of files and the total cost.
