本文へ移動
cccskills
無料GitHub で公開日本語紹介

render-offer-ad

商品写真とブランド情報をもとに、見出し・商品・根拠付き訴求・CTAの4場面で構成する縦型広告動画を生成します。正方形版も書き出せます。

原文原文の説明を見る

Render a punchy ~12s vertical (9:16) music-only direct-response OFFER ad as a 4-beat kinetic-typography film — HEADLINE slam → real PRODUCT drop → CLAIM/proof → CTA pill — from one config of copy slots, a real product photo, a brand palette, fonts, bpm, and beat split. DETERMINISTIC + FREE (a bundled Remotion project; springs + interpolate, no AI-gen for visuals). Backgrounds are engine gradient divs off the palette, props are inline SVG, the ONLY composited bitmap is the REAL product photo (objectFit:contain, never stretched), and ALL headline/claim/CTA/URL/wordmark text is typeset in the engine — never AI-rendered (the format's credibility guard). A driver binds the config to Remotion input props, renders the 9:16 master, and derives a 1:1 center-crop with ffmpeg. Two gating checks run before render (claim verbs must match the product's physical format; the claim beat needs an edge-entry mechanism prop). Use for the motion-graphics-offer-ad format.

gooseworks-ai/goose-skillsスター 1,272(GitHub 1,272 + cccskills 0)
連携ツールElevenLabs

実行スコア 未検証

インストール方法を見る

こんなときに便利

  • 商品写真で縦型広告を作りたいとき
  • 広告コピーやテンポを調整したいとき
  • 縦型動画から正方形版を作りたいとき

日本語での紹介

できること

商品写真、コピー、ブランドカラー、フォント、BPM、場面ごとの秒数を設定ファイルにまとめ、約12秒の縦型オファー広告を生成します。見出し、商品写真、訴求と根拠、CTAの4場面を、Remotionのアニメーションでビートに合わせて展開します。広告内の文字はエンジンで組版し、商品写真以外の画像素材は使いません。完成した縦型動画から、中央を切り出した正方形版も作成できます。

こんなときに便利

商品写真を使った短い広告を作りたいときや、コピーや場面の長さを変えながら無料で編集を重ねたいときに向いています。主張の表現が商品の形状に合っているか、訴求場面に動きを示す小道具があるかを、レンダリング前に確認します。

使い方の例

  • 「この設定ファイルから縦型のオファー広告を作って」
  • 「見出しと場面の秒数を変えて、もう一度書き出して」
  • 「完成動画から正方形版も作って」

注意点

Node.js 18以上、Remotion、ffmpegが必要です。商品写真は実物の写真を用意します。音楽ベッドは任意で、別途有料の作成工程を使う場合があります。

この紹介文は、公開されている SKILL.md をもとに AI(OpenAI Codex)が作成しました。正確な仕様は下の原文を確認してください。

含まれるファイル(20)

  • SKILL.md9.7 KB
  • project/.gitignore143 B
  • project/package.json503 B
  • project/public/.gitkeep0 B
  • project/remotion.config.ts116 B
  • project/src/fonts.ts1.4 KB
  • project/src/index.ts108 B
  • project/src/lib/anim.ts4.8 KB
  • project/src/Main.tsx1.5 KB
  • project/src/props.ts4.2 KB
  • project/src/Root.tsx1.0 KB
  • project/src/scenes/Scene01.tsx5.0 KB
  • project/src/scenes/Scene02.tsx4.9 KB
  • project/src/scenes/Scene03.tsx6.5 KB
  • project/src/scenes/Scene04.tsx3.5 KB
  • project/tsconfig.json293 B
  • scripts/config.example.json2.7 KB
  • scripts/render.py11.8 KB
  • skill.meta.json210 B
  • tests/smoke-test.md4.8 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

render-offer-ad

The free, deterministic renderer for the motion-graphics-offer-ad format — the punchy ~12s vertical, music-only, direct-response offer ad built as a 4-beat kinetic -typography film: a HEADLINE slams in word-by-word → the real PRODUCT drops in → the CLAIM/proof lands → a CTA pill resolves. No character, no VO, no captions — the on-screen typeset text IS the message.

This is a bundled Remotion project (project/) driven by a thin Python driver. The shipping master is 100% engine-rendered (springs + interpolate): backgrounds are gradient divs off the brand_palette, props are inline SVG, and the ONLY composited bitmap is the REAL product photo (objectFit:contain, never stretched). ALL headline/claim/CTA/URL/wordmark text is typeset in the engine — never AI-rendered; that is the format's credibility guard. Rendering is free (no paid calls); the only paid step is an optional music bed, gated upstream in the recipe to create-music-elevenlabs.

The whole ad is data: copy strings, product photo, palette, fonts, bpm, and beat split all arrive as config.json and are bound to Remotion input props — nothing is hardcoded in the scenes (the first build's brand strings are generalised into project/src/props.ts). Deterministic → iterate the cut for free.

Choices

The creative calls are the user's, asked by the format recipe before any paid step; this renderer typesets whatever the config holds.

  • headline_angle — category-killer ("[old way] IS DEAD. the new way ↓"), a straight offer, a bold benefit, a pain-point question, or a before → after → copy.headline_words, copy.subline, copy.motif_chip. The demo used the category-killer angle.
  • music — the bed's mood (lo-fi pop, electronic, hip-hop, indie pop, minimal percussion) → music.prompt for create-music-elevenlabs; the rendered music.bed file is what this renderer mixes. The demo used punchy lo-fi pop at 115 BPM.

The 4-beat structure, palette roles, fonts and gates are the format; palette, product photo, claims and CTA are brand facts.

The 4 beats (the spine)

  1. HEADLINE — primary-color radial ground; headline_words slam in WORD-BY-WORD (slamIn, ~7-frame stagger, scale-overshoot + motion-blur smear, settling on the downbeat); subline + an animated bobbing down-arrow drop in.
  2. PRODUCT — light radial ground; the REAL product photo drops in (dropIn) and idle-bobs (bob), objectFit:contain (never stretch); the motif_chip pops in (popIn); optional GENERIC competitor shape + strike-through (wipe) — never a named competitor.
  3. CLAIM — light radial ground; the mechanism_prop slides in from a frame edge (flyIn overshoot, ~20% from the bottom) to add motion AND show the mechanism; the 3-line claim drops in staggered; product held bottom-right.
  4. CTA — primary-color radial ground; the wordmark slams (slamIn); the CTA pill pops in as the motif-chip handoff resolving (popIn) with an arrow nudge; the cta_url fades up.

Scene boundaries are derived from beat_split_sec (default [3.0, 3.5, 3.0, 2.5]s → cuts at frames 0/90/195/285/360 @30fps) so the hard cuts land on the beat downbeats. The motion kit — slamIn / dropIn / bob / flyIn / popIn / wipe — lives in project/src/lib/anim.ts and is kept intact from the first build.

Two gating checks (run before any render — from the recipe)

  • (a) CLAIM-MATCHES-FORMAT — the claim/proof verbs MUST match the product's physical format: liquid → spoon / sip / drink / 0 mess; powder → scoop / mix / no clumps; capsule → 1 a day; gummy → chew. render.py rejects foreign-format vocabulary (e.g. a liquid product must not borrow powder grammar like scoop / no clumps). Set product_format in the config to arm this gate.
  • (b) CLAIM-BEAT MECHANISM PROP — the claim beat must include an edge-entry mechanism_prop (spoon for drinkable liquids, or accent for a neutral edge-entry accent bar) that supplies motion AND shows the mechanism. A text-only claim beat is too static — render.py rejects an unsupported/missing prop.

Run

# Bind config → Remotion input props, render the 9:16 master, derive the 1:1 crop.
python3 scripts/render.py \
  --config path/to/config.json \
  --work-dir <work> \
  --out <work>/master
# → <work>/master-9x16.mp4  (1080x1920)  and  <work>/master-1x1.mp4  (1080x1080 crop)

render.py copies the config's product_hero_image (+ optional music.bed) into project/public/, maps every config key onto the OfferAdProps shape props.ts reads, writes the input props to <work>/props.json, runs npx remotion render offer-ad --props <work>/props.json, then center-crops the 9:16 master to 1:1 with ffmpeg (no 2nd composition). NO hardcoded /Users or clients paths — every asset arrives via the config and a runtime --work-dir.

Scripts

  • scripts/render.py — the driver: gating checks → stage assets into project/public/ → bind config to Remotion input props → npx remotion render (9:16) → ffmpeg 1:1 center-crop.
  • scripts/config.example.json — the shape of the config the recipe binds (brand-neutral worked defaults from the first build; replace every /abs/... placeholder).
  • project/ — the bundled Remotion project. src/props.ts (the input-props schema + beat-layout math + safe defaults), src/lib/anim.ts (the slamIn/dropIn/bob/flyIn/ popIn/wipe motion kit — kept intact), src/scenes/Scene01–04.tsx (the four beats, all copy/palette/fonts from props), src/Main.tsx (the beat spine + audio bed), src/Root.tsx (the offer-ad composition; duration derived from beat_split_sec).

Config → props mapping (what binds to what)

config keyRemotion prop (props.ts)scene that reads it
product_hero_imageproduct_image (staged to public/)Scene02 (drop), Scene03 (anchor)
brand_palette{primary_ground,light_ground,ink,highlight_chip} (dict OR ≥4-hex list)paletteall 4 (grounds/type/chip)
fonts{display,body}fonts (resolved in fonts.ts)all 4
copy.headline_words[] / copy.sublinecopy.headline_words / copy.sublineScene01
copy.motif_chipcopy.motif_chipScene02
copy.claim_lines[]{big,small}copy.claim_linesScene03
copy.cta_label / copy.cta_url / copy.wordmarksameScene04
mechanism_prop (spoon|accent)mechanism_propScene03 (inline-SVG prop)
bpmbpmbeat grid
beat_split_sec [4]beat_split_secderives cut frames + total duration
music.bed / music.fade_out_framesmusic.src (staged) / music.fade_out_framesMain audio bed
show_competitor_strikeshow_competitor_strikeScene02
aspects(driver)9:16 always; 1:1 = ffmpeg crop

Craft rules (load-bearing — faithful to the first build)

  • The composited bitmap is the REAL product photo — never an AI packshot. Clean / transparent bg; objectFit:contain, never stretched.
  • Never AI-render text. Headline, claim, CTA, URL, wordmark — all typeset in the engine. AI never draws a letter in this format.
  • Never Ken-Burns/zoompan over stills — the engine springs carry the motion; a static/zoompan cut was rejected as "too static" on the first build.
  • Music-only, beat-locked — the cuts + big slams land on the 0.0/3.0/6.5/9.5s downbeats; the bed volume ramps to 0 over the last music.fade_out_frames inside the render. No VO, no captions.
  • Never name/jab a competitor — any comparison shape on the product beat is a GENERIC silhouette (show_competitor_strike), not a named brand.
  • The two gating checks are non-optional — a liquid product must not borrow powder grammar; the claim beat must have real prop motion, not a static text stack.

Requires

  • Node.js (≥18) + Remotion (@remotion/cli ≥4.0, pinned in the bundled project/package.json; the kit provides them, and render.py sets up project/ on first use). This capability legitimately needs a node runtime — the renderer IS a Remotion project.
  • ffmpeg on PATH (for the 1:1 center-crop).
  • watch (QC the final master — confirm the headline slams WORD-BY-WORD on the beat, the real product photo drops in + idle-bobs and is NOT stretched, the mechanism prop enters from a frame edge on the claim beat, the claim lines drop in staggered, the CTA label + URL are readable at 1080×1920, the hard cuts land on the downbeats, and the music ramps out; re-confirm both gating checks visually). The recipe gates the only optional paid step (music bed → create-music-elevenlabs) — this capability itself makes NO paid calls.

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

コメント

ログインなしで書き込めます。使ってみた感想、質問、動かなかった環境などを気軽にどうぞ。

まだコメントはありません。最初のコメントを書いてみませんか。

送信するとすぐに公開されます。メールアドレスや電話番号などの個人情報は書かないでください。URL は 2 つまでです。

0 / 1000 文字

このフォームは reCAPTCHA で保護されており、Google のプライバシーポリシーと利用規約が適用されます。

同じリポジトリのスキル

<slug>

無料概要あり

資料には具体的なスキルの内容や手順が記載されていないため、用途や得られる結果を特定できません。

  • 用途を確認したいとき
  • 入力や手順を確認したいとき
  • 期待する結果を確認したいとき
gooseworks-ai/goose-skills1,2722026年10月27日 更新

ad-angle-miner

無料概要あり

顧客の課題や商品情報、広告事例を調べ、根拠のある広告訴求と静止画・動画・コピー案にまとめます。動画案は実際の制作フォーマットとの相性も確認し、商品単位の角度集として整理します。

  • 商品の根拠に沿った広告の切り口を探したいとき
  • 静止画広告や動画広告の案を作りたいとき
  • 顧客の言葉から見出しや広告文を考えたいとき
gooseworks-ai/goose-skills1,2722026年10月27日 更新

ad-campaign-analyzer

無料概要あり

Google、Meta、LinkedInなどの広告実績を分析し、成果の出た広告や予算の無駄を特定します。停止・拡大・テスト案や、具体的な予算配分を提案します。

  • 広告予算の無駄を見つけたいとき
  • 複数媒体の成果を比較したいとき
  • 広告の停止・拡大候補を決めたいとき
gooseworks-ai/goose-skills1,2722026年10月27日 更新

ad-lead-quality-analyzer

無料概要あり

広告費と登録後の成果を照合し、質の高いリード獲得にかかった実コストを算出します。広告素材ごとに拡大・維持・調査・停止の判断材料を整理するスキルです。

  • 広告素材ごとの実質獲得コストを比べたいとき
  • 低CPAでも質の低い広告を見つけたいとき
  • 登録後の成果データとの照合状況を調べたいとき
gooseworks-ai/goose-skills1,2722026年10月27日 更新

ad-management-intake

無料概要あり

Meta広告を始める前にブランド情報を調べ、予算や広告表現に関わる不明点だけを質問して準備を整えます。確認事項と仮定を記録し、ブランド情報とキャンペーン概要を作成します。

  • ブランド情報が未記録の状態で広告を始めたいとき
  • 予算や広告期間の前提を整理したいとき
  • 広告で使う主張や制約を記録したいとき
gooseworks-ai/goose-skills1,2722026年10月27日 更新

ad-policy-check

無料概要あり

広告文や画像内の表現を配信先と商品カテゴリのルールに照らして確認し、直せる箇所を修正しながら、法務や人の判断が必要なリスクを広告ごとに整理します。

  • 広告の配信前チェック
  • 広告画像や動画の表現確認
  • クリエイター広告の表示確認
gooseworks-ai/goose-skills1,2722026年10月27日 更新

gooseworks-ai のスキルをすべて見る

このスキルの問題を報告する