EggAPI/skills / eggapi-ad-remix
← all skills
ads · ad buyers

Winning ad remix

Break down why an ad works, then keep its structure while changing one thing at a time: hook, person, setting, offer or copy. Image and video variants, with a manifest for testing.

./winner.mp4 is our best ad. Make 4 variants with new hooks and a new presenter

eggapi-ad-remix/SKILL.mdraw ↗

when the agent picks itRemix 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 (爆款素材裂变、广告变体、素材迭代、跑量素材、素材疲劳).

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:

VariableExample
Hooka question instead of a claim, a different first image or first 2 seconds
Persona different age, gender or style of presenter
Settinghome instead of studio, outdoors instead of indoors
Offer or copya new headline, a different benefit, a new call to action
Product variantanother 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.

Edit your copy of this file to change the steps, defaults or models; the agent follows your version.

connected
mcp https://api.eggapi.ai/mcp
models ...
Claude Code · Codex · MCP
█