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

wrapped-video

このスキルは、ユーザーが「Spotify Wrapped風の動画を作りたい」「Year in Review / 年間振り返り動画を作成したい」「パーソナライズされたデータ動画を作りたい」「まとめ動画を生成したい」「Wrapped風動画ジェネレーターを構築したい」「データテーブルを共有用動画に変換したい」「ユーザー別の統計動画を作りたい」と要望した際に使用します。1行のデータから1本の共有用動画を生成するパターン、Wrapped特有のシーン構成(大きな数値の公開、Top-Xリスト、最上級の表現)、アニメーション付きデータカウンター、9:16の縦型画角、および1つのテンプレートから多数のパーソナライズ動画を一括レンダリングする手法をカバーします。

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

1仕組みと動作原理

手法全体が「1つのテンプレート × 1つのデータテーブル → 各行1本の動画」に基づいて構築されています。まず1行のレコードに対して型定義されたスキーマを策定し、動画全体をそのレコードの純粋関数とします。1行のデータで埋められないシーンはWrappedに配置すべきではありません。

skills/wrapped-video/SKILL.md
Define a typed schema for one record. The whole video is a pure function of it.
これにより「大量パーソナライズ」が編集の課題からデータ契約の課題へと昇華されます。後続の並行処理、命名、重複排除はすべて「行を入力とする」前提に基づきます。

2つ目の必須要件は「スクリーンショットを想定した設計」です。各シーンは2秒以内に読み取れ、静止画として停止させた状態でも美しく見える必要があります。なぜなら、実際にSNS等で共有されるのはその1枚の静止画だからです。

skills/wrapped-video/SKILL.md
2. **Built to be screenshotted.** Each scene must read in under 2 seconds and look good frozen
動画そのものを目的としスクリーンショットを副産物とするのではなく、共有される成果物(静止画)を本来の設計目標とします。

シーン構成は5〜7種類の短いシーンタイプ(Intro / Big-number / Top-X / Superlative / Comparison / Time-heatmap / Outro)に固定され、各シーンは約2.5〜4秒です。年ごとにデータと配色のみを変更し、シーン構成自体は変更しません。

skills/wrapped-video/SKILL.md
A Wrapped is a fixed sequence of short scene *types*, each ~2.5–4s.
構成の固定こそが「1つのテンプレートで数百万本の個別動画を支える」前提です。再利用されるのは映像ではなく「スロット(枠)」です。

ストーリー展開は「インパクトの上昇順」で構成します。統計指標を感情的な負荷(数値の大きさ、希少性、見栄えの良さ)の昇順に並べ、メインとなる数値をクライマックスに配置して最も長く表示します。後から盛り上げられなくなるため、最大の数値を最初に出してはなりません。

skills/wrapped-video/SKILL.md
**Sequence stats for rising impact — smallest first, biggest last.**
これは単なる編集の細部ではなく「ソート順」をストーリー設計へと昇華させる規則です。クライマックスのフレームを最も大きく、最も長く表示することがセットで要求されます。

主人公は必ず視聴者自身でなければなりません。最初の2秒以内に名前を表示し、ユーザー専用のアクセントカラーを採用し、コピーはすべて二人称を使用します。異なる2人のユーザーに対してある1フレームが全く同一に見える場合、そのフレームは機能していません。

skills/wrapped-video/SKILL.md
If a frame would read identically for two different users, it isn't pulling its weight.
これは「個別化すべき」という抽象的なスローガンではなく、「同一フレームが異なる行間で異なっていなければならない」という実践可能な検収基準です。

代表的なモーション演出は巨大な数値カウントです。必ずuseCurrentFrame + springで駆動させる必要があり(レンダラーのフレーム単位スナップショットでチラつきが発生するためsetState/setIntervalは禁止)、ロケール形式を適用し、数値変動時の幅の揺れを防ぐためにtabular-numsを使用します。

skills/wrapped-video/SKILL.md
Drive it from `useCurrentFrame()` (never `setState`/`setInterval` — that flickers on render), ease it with a spring, and format with `toLocaleString()`.
同パック内のexplainer-videoやmap-animationと共通のフレーム駆動規律を採用しています。

縦型のセーフゾーンはピクセル単位で定量化されています。1080×1920でレンダリングし、重要コンテンツ(名前、数値、リスト、CTA)は画面高さの中央80%以内に収め、上下のプラットフォームUI被りエリア(上部12%、下部18%)を回避します。

skills/wrapped-video/SKILL.md
Render **1080×1920**. Stories/Reels/TikTok crop and overlay UI, so keep all type and key numbers inside the **center 80% height**, clear of the **top 12%** and **bottom 18%**.
UIによる隠蔽は「見た目の問題」ではなく、最も見せるべき数値が消失することを意味するため、ピクセル範囲で厳密に指定しています。

バッチレンダリングはこの手法の価値を具現化する部分です。1度バンドルした後、行ごとにselectComposition + renderMediaを実行してinputPropsを渡し、不変のIDで命名して冪等性を担保します。バリデーションに失敗した行はスキップしてログを記録し、中途半端な生成物をレンダリングしません。

skills/wrapped-video/SKILL.md
The payoff. Render every data row to its own MP4 with `renderMedia`, passing the row as `inputProps`.
「純粋関数 + 不変命名」により、再実行時の上書きや失敗行の単独再実行が可能になります。これが万単位のスケールを実現する鍵です。

2コア機能

01Wrappedシーン構成 + フレーム単位の絵コンテタイムライン(7種類のシーン、22秒@30fpsのシーン別フレーム区間)
02行レベルのデータ契約:1行のレコードを定義するzodスキーマ + Composition登録(schema + defaultProps)
03巨大数値カウンターコンポーネント(spring駆動 + interpolate + toLocaleString、幅ブレ防止のtabular-nums)
04Top-Xリストの時間差イン演出(1行ごとに1つのspring、Rank 1から順に開始、完全に一致したモーションカーブ)
05パーセンタイルバーと数値カウントが同期するクライマックスシーン
06シーン構成とトランジション:絶対フレームの手動計算を不要にする<Series>、TransitionSeries + fade/slide
07バッチパイプライン:CSV/JSON → スキーマ検証 → renderMedia → out/wrapped-<id>.mp4(1回バンドル、並行数制限、冪等な命名、重複排除、Lambdaスケーリング)
08縦型セーフゾーン規則 + 静止画共有に適したoutroカード(最重要要素を垂直中央の約960pxに配置)
09付随する成果物:ユーザーごとの共有用静止画(outroフレームを出力するrenderStill)およびREADME用デモGIF

3外部依存関係

KindDependency / Endpoint
clinpx remotion still / render / compositions(单行验证与正式编码)
clinpx tsx(运行批量脚本 render-all.ts)
package@remotion/bundler 与 @remotion/renderer(bundle + 逐行渲染)
packagezod(行级 schema 校验)、p-limit(并发上限)、csv-parse(CSV 解析)、@remotion/transitions(转场)
network@remotion/google-fonts:批量渲染时把字体内联进 bundle(避免 headless 缺字形/FOUT)
api可选:Remotion Lambda(AWS 无服务器扇出),面向万级批量
cliffmpeg / ffprobe(contact-sheet.sh 与 probe-mp4.sh)

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

安全運用のための推奨統制措置
Agent 向け
段階的・都度認可、サンドボックス推奨
管理者向け
承認フロー、ロールバック可能、全履歴監査
判定根拠(ファイルパスと抜粋)
  • scripts/: ローカルスクリプトまたはコマンドの実行: npx remotion still / render / compositions(SKILL.mdの指示に基づく):必要に応じてnpmからRemotionを取得・実行
  • 网络端点: 外部ネットワークアクセスの宣言: ビルドフェーズ:@remotion/google-fontsがフォントを取得してバンドル内にインライン化(ヘッドレス環境対策としてリファレンスで明示的に推奨)
  • 本地工作目录: ファイルの読み書きと成果物の出力: out/wrapped-<recordId>.mp4(1行につき1本の動画、冪等性担保のため不変IDで命名)、out/wrapped-<recordId>.jpg(
監査ノート: 判定対象はスキル自体のディレクトリです(skills/wrapped-video/:SKILL.md + references/ 3ファイル + 0バイトのREADME.md。ディレクトリ内にスクリプトや認証情報の読み込み、ディスク書き込みは存在しません)。Amber判定となった要因は実行チェーンと依存関係の範囲にあります:① 出力契約として各行のMP4レンダリングに `npx remotion still/render` が要求され、npxがnpmレジストリからRemotion CLIおよび@remotion/*関連パッケージを取得・実行し、ローカルのバンドルおよびヘッドレスChromium内でレンダリング対象のプロジェクトコードを実行する点(同作者パックのremotion-videoも同一理由でAmber判定);② バッチ処理の実行パスがtsx、zod、p-limit、csv-parse、@remotion/bundler/renderer/transitions等のサードパーティ製パッケージに依存している点;③ リファレンスで提示されているオプションのスケーリング経路がRemotion Lambda(AWS)であり、導入時にクラウド認証情報や課金が発生する点。スキル自体は認証情報や環境変数を読み取らず、ビジネスAPIやテレメトリ収集、保護機能の迂回も行わないためRedではありません。発火条件:実際にレンダリングを実行(またはLambdaを有効化)した時のみ発生し、スキーマやコンポーネントの記述のみ、またはレンダリングを伴わないデータ検証のみの場合は発火しません。

5二重目の独立検証

  • [ok] 外部依赖调用点复核(npx remotion / npx tsx / @remotion/* / zod / Lambda) — SKILL.md Verify loop 确有 `npx remotion still Wrapped out/f-start.png --frame=0 --props='{...one user...}'` 与 `npx tsx render-all.ts`;batch-pipeline 确有 `import { renderMedia, selectComposition } from "@remotion/renderer";`、`p-limit` 与 `renderMediaOnLambda`;remotion-recipes 确有 @remotion/google-fonts 与 @remotion/transitions 用法。全部落地,非推测。
  • [ok] 是否隐含云端凭据需求 — 本地路径(renderMedia)不需要任何云端凭据;仅可选 Lambda 路径会引入 AWS 配置。SKILL.md/reference 中无 AWS key、无 access token 字面量,也无读取 env 的代码——故按「不读凭据」处理,但在 security.reason 与 verdict.risks 中标注了 Lambda 接入时的凭据/计费含义。
  • [ok] 帧驱动纪律的内部一致性 — SKILL.md 输出契约与 remotion-recipes 开篇「The one rule that prevents broken renders」一致禁止 setState/setInterval/Date.now()/CSS @keyframes 计时;大数字组件示例也确实只用 useCurrentFrame + spring + interpolate。
  • [ok] 数据契约与场景语法的耦合 — wrappedSchema 字段(name / year / minutesListened / topArtists / topGenre / percentile / accent)与场景类型表逐项对应(Intro 用 name+year、Big-number 用 minutesListened、Top-X 用 topArtists、Superlative/Comparison 用 percentile+topGenre、per-user accent 贯穿);未见场景需要而 schema 未提供的字段。
  • [ok] 安全区数值与 storyboard 的自洽性 — 1080×1920 下 top 12% = 0–230px、bottom 18% = 1575–1920px、center 80% = ~230–1575px,与 scene-grammar 的安全区表一致;垂直中心 ~960px 落在中心区内。数值互相自洽。
  • [ok] 跨目录 / 跨 skill 引用可解析性 — 正文引用的 `scripts/contact-sheet.sh`、`scripts/probe-mp4.sh` 位于仓库根(单装本 skill 目录会悬空,需装整个 repo);本 skill 自成闭环,未强依赖兄弟 skill(只需 Remotion 本体)。
  • [ok] 功能声明 vs 实际能力 — frontmatter 宣称覆盖「数据行 → 一条可分享视频」的范式、场景语法、计数动效、9:16 取景与批量渲染,SKILL.md 与三份 reference 逐项兑现(含 CLI 与 Node 两套批量变体);未夸大——不声称自动产出数据或自动分发。

6結論

  • 「共有用静止画」を最終目標とし、共有カードを確定させてから上昇曲線を逆算して設計するため、トピック選定とレイアウトに客観的な判定基準が存在する点
  • データ契約を最優先(型付きスキーマ + Composition登録 + 行ごとの検証)とすることで、「1本の動画 = 1行のデータの純粋関数」をエンジニアリングとして確実に再現できる点
  • 単なる「個別化が必要」という精神論ではなく、「同一フレームが異なるユーザー間で異ならなければならない」という実践的で厳密な検収基準を持つ点
  • ストーリーの並び順が明確なルール(小から大へ、クライマックスを最大かつ最長に)として定義されており、最もありがちな「最初に最大数値を明かしてしまう」構成ミスを回避できる点
  • 製品価値の核となるバッチ処理に対し、1回バンドル、冪等命名、重複排除、並行数上限、サムネイル静止画出力といった実用的なエンジニアリング詳細まで網羅されている点
  • 最適な用途: 「同一の映像フォーマットで、ユーザーごとに異なる数値を持つ」プロダクト連携シナリオに最適です。年間振り返り/個人統計(音楽再生、フィットネス、読書、支出、ゲーム、営業実績レポート、学習進捗など)、特に1枚のテーブルデータから数千〜数万本の縦型ショート動画を一括生成し、各動画がスクリーンショット1枚でそのままSNS共有できる品質を求めるチームに適しています。
    不向きな用途: レコードごとの構造化データが存在しない手動編集の映像制作には不向きです(本スキルはデータテーブルの存在を前提とします)。横画面や長尺のストーリーテリングには適していません(9:16のショートシーン構成を前提としています)。また、精緻なナラティブアークやナレーションを必要とする解説動画にも適していません(その場合はexplainer-videoを使用してください。本スキルのシーンはスロット化されており、ナレーションなしの静止画フレンドリーな構成に特化しています)。
    Install Agent-Ready
    ① Verified Mirror 2026-09-28
    Option A · Direct DownloadDownload wrapped-video.tar.gz
    sha256: 16427a3a8db59d32…
    Option B · Copy Guide for Agent
    install.json
    Agent はこの JSON ガイドから自動的にダウンロードして検証します。
    ② Upstream GitHub
    GitHub Repo ↗
    Pinned to commit 3e2d411b72.