ad-creative-video
This skill should be used when the user asks to "make a video ad", "create an animated ad", "build a performance/UGC-style ad", "batch-produce ad creative variations", "generate ad variants for A/B testing", "swap headline/offer/CTA across many ad versions", or "export one ad in multiple aspect ratios for Meta/TikTok/Reels". Covers ad hook structures, hook→CTA message-match, data-driven variant generation (1 template × CSV = N ads), multi-aspect export, and platform specs.
1How It Works & Mechanism
Batch mechanism: A data-driven template × CSV = N variants, rendering row by row with each row representing a complete message-matched ad.
The payoff: author the ad once, then let a CSV drive the matrix. Each row is one fully-formed, message-matched variant. Render once per row.
Deterministic rendering discipline: The template reads only one variant object, and all animation values must be pure functions of useCurrentFrame().
Make every animated value a pure function of `useCurrentFrame()` so each frame renders deterministically (no CSS transitions, no library timers — they desync the render).
Experiment interpretability discipline: Change only one field at a time while locking all other layout, animation, color palette, and duration settings.
Hold layout, motion, colors, and timing constant; swap *only* the field under test (hook, or offer, or CTA). Mixing two changes makes the winner uninterpretable.
Hooks and CTAs must be message-matched: The promise made in the first 3 seconds must match the promise fulfilled by the button.
The promise made in the first 3 seconds must be the promise the button pays off.
Multi-aspect ratio export: Design the hook, product, and CTA entirely within a 1:1 center square, relying on recentering rather than letterboxing.
Design the hook text, product, and CTA inside the **1:1 center square** so they survive every crop.
Platform safe zones are strict specs: The bottom third of a 9:16 layout is occupied by platform UI, requiring a reserved bottomSafe area.
The 9:16 bottom third is the single most violated zone — captions, the CTA button, and the handle stack there.
Bad data must fail loud: The parser accumulates errors and exits with code 1, preventing any defective ads from being produced.
error(s) — no broken ads written.
Verification loop: Render cheap PNG stills first, then validate using shipped props (real data rows) instead of defaultProps.
Cheap PNGs first, full encode only once they're clean. Render with the **shipped** props (the real row), not just `defaultProps`.
2Core Capabilities
3External Dependencies
| Kind | Dependency / Endpoint |
|---|---|
| package | remotion(帧驱动渲染框架) |
| cli | npx remotion render / still |
| package | zod(输出契约要求的 props schema) |
| cli | ffmpeg / ffprobe(仓库共享 contact-sheet.sh、probe-mp4.sh) |
| network | iart.ai(reference 尾部推广链接,具 utm 参数;仅读者点击才请求) |
4Recommended Governance & Evidence
- scripts/: Execute local scripts or commands: No bundled scripts inside the skill directory; SKILL.md instructs the agent to run `node csv-to-props.js variants.csv ./pr
- 网络端点: Declare external network access: No business API calls or business endpoint requests during runtime; ad data and assets are strictly local.
- 本地工作目录: File I/O and artifact outputs: Writes `props/<id>.json`, `out/<id>.mp4`, and `out/demo.gif` in the user project; contact-sheet.sh writes
5Second-Pass Verification
- [ok] skill 目录内是否藏脚本或凭证读取 — 目录只有 README.md(0B)/SKILL.md/references/*.md;全仓 token 扫描 process.env|API_KEY|TOKEN|cookie|keychain|Bearer 零实质命中(唯一命中是 product-demo reference 的 `.cookie-banner{display:none!important}`,属 UI 清理样式,非凭证读取)。
- [ok] SKILL.md 与 reference 的渲染命令是否自洽 — SKILL.md 走「扁平 props/ + --props-merge 传 aspect」,reference 走「props/<ar>/ 目录 + calculateMetadata 解析尺寸」;两条路线实现同一目标,非矛盾。
- [discrepancy] CSV 解析器校验的真实行为 — `if (errors) return;` 用的是全局错误计数:首个坏行之后,后续原本合法的行也不会写盘(注释宣称的语义是「不产出坏广告」)。行为偏保守、不会产出错误广告,但会让使用者误以为只有 1 行坏。
- [ok] hook 长度告警阈值与平台规格是否一致 — 解析器 `if (row.hook && row.hook.length > 60) console.warn(...)` 与 platform-specs 的 hook 在 9:16 ≤ ~60 chars 的规格对得上。
- [discrepancy] `Packaged helper (scripts/)` 的路径可解析性 — SKILL.md 写 `scripts/contact-sheet.sh` / `scripts/probe-mp4.sh` 这类相对路径,但这些脚本位于**仓库根** scripts/,skill 目录内并无 scripts/(skill 位于 skills/ad-creative-video/);从 skill 目录直接执行会找不到文件。
- [ok] 跨 skill 指名与边界声明 — SKILL.md 用结构描述而非 skill 名排除促销与证言类("Not for sale/discount countdown promos, and not for testimonial/review-driven ads"),不存在跨仓库依赖或指纹不明的外部 skill 调用。
6Verdict & Scenarios
6cc9db5805b68bad…