---
name: eggapi-ad-remix
description: Remix a winning ad into new variants with EggAPI - break down why a creative works (hook, layout, colors, pacing), then keep that structure while changing one thing at a time (hook, person, setting, offer or copy), for images and short videos, with a manifest for testing. Use when the user has an ad that performs well and wants more like it, ad variations, creative iterations, or a fresh version of a fatigued creative (爆款素材裂变、广告变体、素材迭代、跑量素材、素材疲劳).
---

# Winning ad remix

Find out why an ad works, then make variants that keep what works and change one thing each, so test results show which change helped. 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, 200 MB per video):

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

  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 as soon as its task completes, into `eggapi-output/<project>/` under the current directory, with `curl -sSL -o <file> <url>`: some output links expire after 24 hours, and some file hosts reject other HTTP clients. Keep the extension from the URL and use 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.

## Ground rules

Remix only creatives the user owns or has the rights to. When the user brings a competitor's ad, take its structure as inspiration (angle, layout, pacing) and do not upload or copy its footage, people, brand or text. Never reproduce a real person's likeness without their permission.

## 1. Collect the inputs

Ask only for what is missing:

- **The winning creative**: image or video file, or URL.
- **Why it counts as a winner**: the metric (click-through, hook rate, conversions) and the audience it ran on. It tells you what to protect.
- **What may change** and what must stay (brand colors, offer, product).
- **Product photos** for the product in the ad.
- **How many variants** (default 4) and the placements.

## 2. Break it down

For an image, if you can view it, note the hook element, the layout (where the product, the headline, any face and the call to action sit), the color palette, the headline formula and the call to action.

For a video, get its length and pull one frame per second to look at:

```bash
ffprobe -v error -show_entries format=duration -of csv=p=0 winner.mp4
mkdir -p frames && ffmpeg -i winner.mp4 -vf "fps=1,scale=480:-1" frames/f-%02d.png
```

Then write a shot table: time, shot, what happens, on-screen text, sound. Without ffmpeg or image viewing, ask the user to describe the ad shot by shot.

Finish with a short "why it works" and a **keep list** of two to four elements every variant must keep.

## 3. Plan the variants and confirm

Change one variable per variant, so a winner can be traced to its change:

| Variable | Example |
| --- | --- |
| Hook | a question instead of a claim, a different first image or first 2 seconds |
| Person | a different age, gender or style of presenter |
| Setting | home instead of studio, outdoors instead of indoors |
| Offer or copy | a new headline, a different benefit, a new call to action |
| Product variant | another color or size of the same product |

Show a table: variant, what changes, what stays, placement, model, estimated cost. Wait for the go-ahead.

## 4. Image variants

Use the winner and the product photos as `images` (8 at most) and keep the winner's aspect ratio, at `resolution: "2k"`:

- Default: `google/nano-banana-pro/edit`; alternative `bytedance/seedream-v5.0-pro/edit`.
- Copy-only changes: `openai/gpt-image-2/edit` with the winner as the single input image; it renders text well.

> Recreate this ad with the same layout, composition, color palette and typography style. Change only this: {the variant's change}. Keep the product exactly as in the product photos: same shape, colors, logo and label text. Headline: "{headline}", in the same position and style as the original.

For other placements, recompose each approved variant: "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."

## 5. Video variants

Two routes; try the first and fall back to the second.

**Follow the winner's structure.** Text-to-video with the winner as a reference video:

- Model: `bytedance/seedance-2.5/text-to-video`; alternative `alibaba/wan-3.0/text-to-video`.
- `parameters`: `{"reference_videos": ["<winner URL>"], "reference_images": ["<product photo URL>", "<new presenter or setting image URL>"], "generate_audio": true}`. Keep references few: one video up to 15 seconds and one to three images. Trim a longer winner first: `ffmpeg -ss 0 -t 15 -i winner.mp4 -c:v libx264 -c:a aac winner-15s.mp4`.
- `duration`: the winner's length, up to 15. `aspect_ratio`: the winner's. `resolution`: `720p` for a test, `1080p` for the final.
- Prompt the new version and how to use the references:

  > Follow the shot order, camera movement and pacing of the reference video. {The variant: new presenter, new setting, new hook action}. The product looks exactly like the product in the reference image.

**Rebuild shot by shot.** When the reference is rejected or not followed: make each shot's first frame as an image variant (step 4), animate each with `bytedance/seedance-2.5/image-to-video` (alternative `alibaba/wan-3.0/image-to-video`) using the shot's duration, then join the clips:

```bash
printf "file '%s'\n" v1-shot-*.mp4 > v1.txt
ffmpeg -f concat -safe 0 -i v1.txt -c:v libx264 -crf 18 -pix_fmt yuv420p -c:a aac v1.mp4
```

Render one variant first and review it with the user before submitting the rest. Music from the original stays with the user: they add their licensed track in the editor.

## 6. Check and deliver

If you can view the outputs, check each variant against the keep list, that only the planned variable changed, that the product matches the photos, and that headlines are spelled exactly as approved. Regenerate once what fails and say which files were re-run.

Save to `eggapi-output/<campaign-slug>-remix/` with names like `v1-hook-question-9x16.png` or `v3-setting-outdoor-9x16.mp4`, plus `breakdown.md` (the shot table, why it works, the keep list) and `manifest.csv` with the columns `file,variant,changed,kept,placement,aspect_ratio,model,cost`. Finish with the list of files and the total cost.
