コンテンツ制作 · iart-ai/ecommerce-video-skills

promo-video

This skill should be used when the user asks to "make a sale video", "create a promo video", "build a discount/percentage-off reveal", "animate a was→now price with a strike-through", "do a Black Friday / flash-sale / clearance video", "make a promo-code reveal with a countdown", or "batch a promo template across many products". Covers the offer-announcement arc — discount reveal, price strike-through, promo code, urgency, product shot, CTA — and product+offer data → many videos.

L4 高権限 · 段階的認可と監査V1 コミット固定コマンド実行ネットワーク通信ファイル書き込みDual-pass Audit
Author iart-aiGitHub iart-ai/ecommerce-video-skills ↗Stars 8License MIT(仓库根 LICENSE:「MIT License」/「Copyright (c) 2026 iart.ai」;.claude-plugin/plugin.json 与 README「## License」同声明 MIT)Commit 2bd0dd19c9
管理レベルは Skill の能力と推奨統制措置を示すものであり、品質や安全性の認証、利用可否の判定ではありません。使用の可否はユーザーおよび管理者が決定します。Agent 環境によって制約が異なるため、自動保護を仮定しないでください。第三者製 Skill の著作権は原著作者に帰属し、利用リスクは利用者が負います。

1仕組みと動作原理

第一の鉄則:数値こそが情報である――価格と割引率は必ず導出計算し、二重入力は絶対にしない。

skills/promo-video/SKILL.md
1. **The number is the message — keep it exact.** Prices and percentages must be computed, never typed twice. Derive `now` and the `% off` from `was` and the discount so they can't disagree.
ここでの「正確性」とは、表示フォーマットではなくデータソースが一意であることを指します。

真のソースのみを保存:now と pct は永続化せず、was/discount から必ず派生させることで自己矛盾を構造的に排除する。

skills/promo-video/references/promo-components.md
One object per product. `now` and `pct` are NOT stored — they are derived, so they can never contradict `was` and `discount`. Store only the source of truth.
手動の確認に頼るのではなく、構造的に保証します。

取り消し線が先、値下げ表示は後――順序を間違えるとバグとして認識される。

skills/promo-video/SKILL.md
Order matters: strike the old price *first*, then drop the new one. Striking and counting at the same instant reads as a glitch.
実装上、strike は 0〜12 フレームで幅を補間し、新価格は第 8 フレームからスプリング曲線でカウントアップします。

金額はセント(または最小通貨単位)に四捨五入してからフォーマットし、Intl を使用してレンダリングする。

skills/promo-video/references/promo-components.md
Compute every displayed figure from the offer in one place. Round to cents *before* formatting so the price a viewer reads is exactly the price they pay.
SKILL.md の基準に準拠:Round currency to cents + Intl.NumberFormat + tabular-nums。

一括生成前に 1 行ずつ検証し、不正行で即座に失敗(fail loud)させる:不正行のサイレントレンダリングこそが「470 ドルが 47 ドルになる」元凶である。

skills/promo-video/references/promo-components.md
A batch that silently renders a bad row is how a $470 item ships labelled "$47". Validate every offer before rendering and stop the run on the first bad one.
検証項目:now < was、discount ∈ (0, 1)、code の存在、deadline のパース可否、画像の存在。

緊急性は本物でなければならない:明確な期限またはリアルなカウントダウンを提示し、偽タイマーは絶対に使わない。

skills/promo-video/SKILL.md
Urgency lifts conversion only when it's real. Show a concrete deadline ("Ends Sun 11:59pm") or a live-looking countdown — never a fake timer.
期限表示は ≥2 秒の可読性を保ち、カウントダウンは改行して配置することが求められます。

1 フレームにつき 1 つのフォーカス:1 つの割引、1 つのコード、1 つの CTA。2 つのオファーがある場合は 2 本の動画を制作する。

skills/promo-video/SKILL.md
2. **One offer, one focus per frame.** A single discount, a single code, a single CTA. Competing offers kill the urgency. If there are two deals, make two videos.
割引数値は画面内で最も主張の強い要素(ブランドや製品よりも大きく)とします。

価格帯に応じて表現方法を選択:高価格帯にはパーセンテージ、低価格帯には固定金額を使用する。

skills/promo-video/SKILL.md
Choose the framing by price: percentage for higher-priced items ("40% OFF" beats "$32 off"), a flat amount for low-priced items ("$5 off" beats "8% off").
「どのように伝えるか」も美的判断に委ねず、明確なルール化を行います。

検証ループの重点は「金額が正しいか、画像が存在するか」:数値の正確性と商品画像の読み込みは妥協を許さない。

skills/promo-video/SKILL.md
This is heavy-tier: the deliverable is an MP4, not a live page. A promo carries exact money — the verify pass is mostly *are the numbers right and is the product image actually there*.
チェック項目:was/now/% の正確さ、旧価格への確実な取り消し線描画、コードの正しいスペル、指定通りの画像であること。

2コア機能

01オファー派生モデル(priceModel:now/pct/off はすべて was から算出)
02行単位の厳格な事前検証(now < was、discount 範囲、code、deadline、画像の存在確認)と fail loud
03ディスカウントバッジ(割引数値を画面で最も目立たせる構成)
04was→now 取り消し線値下げアニメーション(strike 先行 + スプリングカウント + 落ち着き時のオーバーシュート)
05プロモーションコードチップ(等幅フォント + 破線ボーダー + スクリーンショットしやすい静止表示)
06カウントダウンまたは静的期限表示(6 秒動画では静的期限の方がクリーン)
07template × data の一括処理(価格リスト → N 本の動画生成、データ主導で価格を保証)
08マルチアスペクト比のリフレーム(バッジ、価格、コード、CTA を中央セーフゾーン内に配置)

3外部依存関係

KindDependency / Endpoint
packageremotion(frame/spring/interpolate/Img/Sequence)
clinode fs(校验时检查图片是否存在)
packageIntl.NumberFormat / Intl.DateTimeFormat(运行时内置,无第三方包)
clinpx remotion render(逐 offer 渲染)
cliffmpeg / ffprobe(仓库共享 contact-sheet.sh、probe-mp4.sh)
networkiart.ai(reference 尾部推广链接,具 utm 参数;仅读者点击才请求)

4推奨統制措置と判定根拠

安全運用のための推奨統制措置
Agent 向け
段階的・都度認可、サンドボックス推奨
管理者向け
承認フロー、ロールバック可能、全履歴監査
判定根拠(ファイルパスと抜粋)
  • scripts/: ローカルスクリプトまたはコマンドの実行: skill ディレクトリ内に独自スクリプトは含みません。SKILL.md/reference が agent に対し `node`(ドキュメント内にソースを含む検証・派生処理)および `npx re` の実行を指示します。
  • 网络端点: 外部ネットワークアクセスの宣言: 実行時にビジネス用 API 呼び出しは行いません。価格および商品データはローカルの offers/*.json から、商品画像はローカルの public/ ディレクトリから取得します。
  • 本地工作目录: ファイルの読み書きと成果物の出力: ユーザープロジェクト内の `out/<name>.mp4`(オファーごとに 1 本)、`out/f-discount.png`、`out/f-price.png` に出力します。
監査ノート: 判定基準「サードパーティのプラグイン、ミラー、リモートパッケージへの依存」に該当:skill ディレクトリ自体は純粋な Markdown(スクリプト、認証情報読み取り、環境変数読み取りは一切なし)ですが、提供パスにおいて remotion および @remotion/cli(npm から npx 経由で取得・実行)と zod スキーマが必要です。同一リポジトリの `remotion-video` が同様の基準でオレンジ(要確認)と判定されており、本判定もそれに準拠しています。**該当しないことが明確な項目**:認証情報・Cookie・環境変数の読み取りなし(トークンスキャンで実質的なヒットゼロ)、外部サービスへの商品素材アップロードなし(レンダリングはローカルで完結)、TLS ダウングレードなし、`--no-verify` なし、サンドボックス無効化なし、自動化回避なし。トリガー条件:実際に動画をレンダリングする際にのみ発生します。

5二重目の独立検証

  • [discrepancy] 「全部为帧纯函数、禁用 Date.now()」与 reference 实现是否一致 — SKILL.md 明确要求所有动画值为 useCurrentFrame() 纯函数(no CSS transitions, timers, Date.now()),其自身示例也写「derived from a deadline prop (deterministic per frame)」;但 promo-components.md 的 Countdown 实际用 `const remaining = Math.max(0, (end - Date.now()) / 1000 - frame / fps);`——引入挂钟时间,同一 props 在不同时刻渲染会得到不同剩余时间,不可复现。
  • [discrepancy] 组件 import 名是否可运行 — promo-components.md 的 composition 写成 AbstractFill(Remotion 并无该导出,应为 AbsoluteFill),且使用处同样写 <AbstractFill …>;照抄会直接 import 失败。
  • [ok] 折扣公式是否两处一致 — SKILL.md 的 Math.round((1 - now / was) * 100) 与 priceModel 的 Math.round((1 - now / o.was) * 100) 同式同精度。
  • [ok] 校验清单是否与 SKILL.md 文字一致 — validateOffer 覆盖 now≥0 且 <was、discount∈(0,1)(当 now 未给)、code 非空、deadline 可解析、图片存在;与 SKILL.md 的 now < was / code present / image exists 一致且更强。
  • [ok] 节拍/时长的一致性 — SKILL.md 的 10s 节拍表与 reference 的帧调度(hook 0 / badge 27 / price 60 / code 210 / cta 270)及 --frames=0-299(10s@30fps)一致。
  • [ok] 「先划线后落价」顺序的实现 — PriceDrop 的 strike 从 f=0 起(0–12 帧画完),新价 spring 从 f-8 起跑;与 SKILL.md 的 strike the old price first 时序意图一致。

6結論

  • 価格の真のソースのみを保持し now/pct を完全派生させることで、自己矛盾する価格エラーを構造的に排除
  • 一括処理前の行単位検証と即座のエラー停止により、「470 ドルのものを 47 ドルで売る」ミスを徹底防止
  • 金額を通貨単位に丸めてからフォーマットし、tabular-nums で表示の揺らぎを抑制
  • 偽の緊迫感を排除し、誠実さを明確なルールとして規定
  • 価格帯に応じた割引表現の分岐(パーセンテージ vs 固定額)に実行可能な基準を設定
  • 最適な用途: プロモーション告知動画を制作する EC 運用・グロースチーム:割引開示、取り消し線による値下げ、プロモコードと期限の提示、価格リストに基づく複数(200 本規模)動画の一括生成、および絶対的な価格精度が求められるケース。
    不向きな用途: 運用型広告や A/B テスト配信(ad-creative-video を使用)、顧客の声・レビュー動画(testimonial 系を使用)、長期的なブランド訴求や製品解説(本スキルは 6〜15 秒のオファー告知に特化)。
    Install Agent-Ready
    ① Verified Mirror 2026-09-28
    Option A · Direct DownloadDownload promo-video.tar.gz
    sha256: 0c3e003bf0617b1c…
    Option B · Copy Guide for Agent
    install.json
    Agent はこの JSON ガイドから自動的にダウンロードして検証します。
    ② Upstream GitHub
    GitHub Repo ↗
    Pinned to commit 2bd0dd19c9.