motion-video — コードレンダリング動画制作 は何をしますか?
映画レベルの作業のためのルータースキル。エレメントレベルのモーション(時間、イージング、スプリング、単一コンポーネント内の色変更)は motion-design に委ねます。~/.claude/skills/motion-design/local/element-motion-params.md を参照して測定されたスプリング数値を確認してください。証拠はラボ <lab>(カード techniques/Tnn、ドキュメント、測定値)にあります。ツールもそこに保管されています(ユーザー 2026-09-30)。そのため、このスキルはそれらをコピーせずにパスを参照します。
すべての参照ルールには証拠レベルが付与されています(references/evidence-and-instruments.md §Tiers): user(ユーザーが動画を見て判断)、measured(校正された機器が原典動画で測定)、verified(ブラインドA/Bテストで検証、範囲が重複しない)、unvalidated(原典で測定されたが、模倣テスト未実施)。未検証のルールを証明済みとして述べてはなりません。
ルーティングテーブル
| タスクの内容が… | 参照先 |
|---|---|
| 最初に決めるべきこと、対象視聴者、トーン、基本色、属する情報、デバイスとトーンの組み合わせ、素材とテキスト | references/whole-film-rules.md |
| 動画タイプ、セクションの骨格(イントロCM、ハイプCM、プロダクトツアー、データショーリール、ナレーション解説動画)、ストーリーボード vs ワンパラグラフ | references/film-types.md |
| バーまたはナレーションライン上のセクション変更、ビートアラインメント、トランジション(シェイプtoシェイプ、ディム、ワイプ)、カメラムーブ | references/rhythm-transitions-camera.md |
| ページの構築、時間駆動レンダリング、MP4へのエクスポート、プロダクトフィデリティ(主張ファイル)、ライブインタラクティブコンポーネントの撮影(§4アイテム9)、カバー、レビューループ、音楽ソーシングとライセンス(§5) | references/build-and-export.md |
| 証拠レベル、各ラボ機器の測定内容、各数値の由来 | references/evidence-and-instruments.md |
| フッテージまたは生成メディア(ローカルComfyUI画像、クリップ)、音楽ビートへのカット、交換可能なEDL — 時間駆動ページではなく編集ルート(ユーザー裁定 2026-10-18)。すべてのアセットにはプロヴェナンスファイルが必要。レンダリングは拒否されます。 | ラボ tools/edit/README.md、デザインラボ docs/edit-route-design.md |
| 連続的な物理的またはアルゴリズム的プロセス(成長するフロント、広がるフィールド、伝播する波) — time-driven ページに合成される manim アセット(PNGシーケンス + プロヴェナンス)。manim の全編動画制作ではありません。全編制作と編集&合成(使用必須アセット)は別レイヤー(ユーザー裁定 2026-10-20)。合成ルールは薄く、初回プローブは進行中 | ラボ experiments/probe-manim-insert-ow2010/README.md; 提案 ~/.claude/outputs/manim-explainer-route-20261020/ |
| 単一要素のスプリング/カラースワップパラメータ | motion-design/local/element-motion-params.md |
| ストーリーボード前のすべての動画: 共有デザインレイヤーをこの動画用のコピーとして — その中の不合格リストは拘束力を持ちます(作者が拒否した作品。絶対に繰り返さないこと) | <item>/inputs/design-axes.md、works_contract.py open でコピー(ステップ0); ラブラウンドは run_arm.py で同じファイルを取得 |
| 同じ原則が投稿、デッキ、Webページに(クロスメディア形式、軸A–I、生成軸J/K、命名されたスクール) — 理論、選択時に参照 | ~/.claude/references/design-axes/ |
作業順序(各ステップは前のステップの後に)
- 何よりもまず確認(
whole-film-rules.md§0): 目的 / 動画タイプ(イントロCM、ハイプCM、プロダクトツアー、解説動画、プロフィール)、表示場所、視聴後の視聴者の行動、対象視聴者、覚えておくべき唯一のこと、エネルギー(穏やか / 活発 / ハイプ。製品だけから推測せず、質問する)と基本色、素材と制限、コンテンツの声(マーケティング vs 軽度技術的)、プレゼンテーション形式(ページ駆動 vs 連続ステージ)。ユーザーがいる → これらを質問し、待つ。無人 → 未回答をbuild/questions.mdに書き込み、リクエストの最も文字通りの解釈を採用し、build/plan.mdに記載する。「產品介紹片」だけではCMかツアーか断定できません(ユーザーr14)。「廣告」だけではイントロかハイプか断定できません(ユーザーr15)。リクエスト内のジャンルや形式名(MAD、PV、ショーリールなど)は動画タイプであり、その動画がトピックとする製品名でもあります。film-types.md§命名に照らして解決し、その定義をストーリーボード前にユーザーと確認してください。そこにエントリのない名前は質問され、決して推測されません — 未確認の名前は、ターゲットミス / 過小期待の失敗です(ユーザー 2026-10-19: 一行のMADリクエストで最初のラウンドが純粋コードMVで返ってきたケース)。正式アイテムかラブラウンドか?(正式 = 作者が送信または誰かに渡すもの。定義は<works>/README.mdにあります)。正式 → タスクの最初の書き込みはpython -X utf8 ~/.claude/tools/design-axes-mount/works_contract.py open <works>/films/<film_id> --medium video --actor main-loop [--toolbox PATH:ROLE:FACET ...]です。リクエストが来たフォルダに関わらず。表示された創作入力行を境界契約に貼り付け、アイテム内で構築します。別の成果物(本のイラストスクリプト、以前の動画)からのジェネレーター、コンポーネント、またはページは、その役割とファセットを持つツールボックスエントリであり、デフォルトではありません(本プロジェクト 2026-10-11: 本の線画ジェネレーターを1080pにスケールしたものが拒否され、現在は否定的参照)。ラブラウンド →run_arm.pyが同じレイヤーをマウントします。 - 動画全体を最初に(
whole-film-rules.md§1): 唯一の対象視聴者、その対象視聴者が知る必要があること、トーン(ステップ0で指定されたエネルギー。指定がない場合のみ製品 + 対象視聴者から)、唯一の基本色(ハイプCMは緩和、whole-film-rules.md§6)を指定します。これら4つは、デバイスが選択される前に固定されます。製品のドキュメントが機能の解決策を述べていない場合、所有者に質問します(build-and-export.md§4 アイテム7)。無人時は、痛点を発明せずにbuild/questions.mdに書き込みます。 - 動画タイプ(
film-types.md): イントロCM、ハイプCM、プロダクトツアー、データショーリール、ナレーション解説動画、プロフィールリール— ステップ0の目的から選択します。最も手近な骨格からではありません。骨格を選択し、ストーリーボード(固定コンテンツ)かワンパラグラフ(多数の実行をスクリーニング)かを決定します。 - リズムソース(
rhythm-transitions-camera.md§1): 音楽のみ → セクション変更は小節線で。ナレーションまたは歌詞がある → セクション変更は行の先頭で。音楽も同時にハードロックされません。動画にナレーションを付けるかどうかは動画タイプとトーンに従います(ステップ1-2)。静かな動画でもゆっくりしたセクションで音楽を使用する場合があります。 - コード前のストーリーボードテーブル: 最初に
inputs/design-axes.mdを読む(ルーティングテーブル、「ストーリーボード前」行)。セクションtごとに、見出し、ビジュアル、データ、レイアウト、トランジション(イン/アウト)、カメラ目標、モーション意図(動く要素ごと、および重ねられたエフェクトレイヤーごとに一行: モーションが伝えること。行のない要素は静止するか去ります、whole-film-rules.md§2a。名前付きエフェクトはその行を説明として取得します。カタログと業界の意味が衝突する名前だけは、業界の意味として構築されます — ラボr28、3/3ラン、ブラインドリーダー; ラボdocs/text-motion-vocabulary.md§3/§5)、キーフレーム(タイムラインkeys[]: セクションごとに少なくとも1つのrole: key— 視聴者が読み取るか明確に見なければならない瞬間、オプションでhold。role: breakdownはセクション内のポーズで、モーションの移動方法を決定。セクション間の継ぎ目は導出され、決して書きません。ラボdocs/agent-review-kbt-design.md§3)、および参照角色K/工具箱(デフォルトはnone。再利用されるジェネレーターまたはコンポーネントは、その役割Kと借用したファセットを指定し、openの--toolboxエントリと一致する必要があります)。ユーザーがいる場合は、ユーザーに表示し確認を待ちます。自分で行った各デザイン決定は、決定した時点でpython ~/.claude/tools/process-ledger/ledger.py addで記録します。テーブルのキャリアは規定されています(ユーザー 2026-10-08、ラボdocs/production-order.md最終セクション): JSONfilm.timeline.jsonと生成された読み取り専用タイムラインページ。承認時に必須 = film_type、audience、energy、rhythm_source、およびセクションごとに at、dur、freedom(locked / guided / free)、motion_intent。カメラ目標/方法は固定のD1/D2語彙を採用。ツール(tools/timeline/、ラボdocs/timeline-layer-design.md)はTL-1マイルストーンまでは構築されません — それまでは、マークダウンテーブルを保持し、それらのフィールド名を使用します(変更されたショットレコード名はデザインの§6.1テーブルにマッピングされています)。 - デバイス: 各デバイスには独自のトーンがあります。ステップ1のトーンと衝突するデバイスは削除されます。トーンをデバイスに合わせて変更することは決してありません(ユーザー 2026-09-30)。ストックデバイス(パーティクルバースト、トンネル、フローティングカードパイル、グリッチ、ビッグテキストasデザイン、フェイクHUD数字)は、コンテンツに結びつけるモーション意図行がある場合にのみ使用されます(§2a)。
- ビルド(
build-and-export.md§1): すべてのフレームが時間の純粋関数である単一のHTMLページ(window.__setTime(t))。タイマー、CSSトランジションなし。 - エクスポート(
build-and-export.md§2): filmkit、ラボのtools/filmkit/render.py(プロファイルlab-round)でエクスポート。手書きのキャプチャスクリプトは決して使用しません。フレームごとにキャプチャ、エンコード、検証し、その後でのみ出力名を公開します。check.pyがファイルが納品可能かを判断します。正式な動画はフォントを@font-faceでバンドルします(CJKとラテンをカバーするオープンライセンスのサンセリフファミリー1つ、例: Noto Sans TC。エクスポートまたは視聴マシンにインストールされたフォントに依存しないこと、ラボD26)。正式な動画は--profile delivery-webでエクスポートします(フォーマットフィールド、さらに動画がopenで開かれたワークスアイテムでない場合、またはそのマウントが古い場合はFK-R-18 / FK-R-19ブロック)。ラウドネスとトゥルーピークはcheck.pyによって事実として報告されます(FK-R-17、情報)。プラットフォームに対して判断するには、--rules <rules file> --target <name>を渡します。ターゲットはルールファイル内の主張であり、ソースとreview_whenを持ちます。スキルによって想定されることはありません。 - レビュー(
build-and-export.md§3): まず1fpsの全動画シート、次に詳細。フィードバックは「秒数 / 場所 / 変更」。一度に1つの変更。最大3ラウンド。その後、正式な動画は並べてレビューされます:works_contract.py review <item>は、タグで選択された承認済みの同タイプ動画の隣に候補のシートを置きます(またはreference: noneと書き込みます)。レビュアーはビルダーではありません(§3 アイテム9)— 単一セッションでは、クリーンコンテキストのサブエージェントがdeliver/_review/side-by-side.pngを読み、評決の最初の行はreviewer: subagent-clean-contextです。works_contract.py deliver <item>は、deliver/_review/verdict.mdが候補より新しいまで拒否します。エージェントレビューパス(ユーザー 2026-10-19、ラボdocs/agent-review-kbt-design.md。ユーザーは方向性とデザインコンテンツのみを提供します): メーカーサブエージェントがビルドし、ディスパッチするメインループセッションがレビューし、動画を決して編集しません。ファイル(tools/review/review.py)を介して通信します。ゲートG0 ストーリーボード(メーカーがディレクターをレビュー)→ G1 キースチル(ハードアイテムのみ)→ G2 K/Tウィンドウ(フィール = POLISH)→ G3 全動画、各最大3ラウンド。不合格リスト、filmkitブロック行、プロダクトフィデリティ、一度だけ見られた欠陥のみがBLOCKできます。ラウンド3以降、最良バージョンが未解決項目をリストして出荷されます。評決はreviewer: dispatcher-main-loop、user_watched: noと述べます(build-and-export.md§3 アイテム10)。 - 納品 下記の承認形態で。宛先: ワークスアイテム(
<works>/films\<film_id>\、述語は<works>/README.md内)。ユーザーが指定したプロジェクトはポインタ(_MOVED_<date>.txt)または自身の本/データのみを保持します。自身のプロジェクトでビルドされ採用された動画(ジェネレーター外部)は、承認された各ラウンド後にworks_contract.py adopt <same root> --id <id> --reviseで再入力します。各アイテムの所在:<works>/STATUS.md(最初に読む)。ラブラウンドは<lab>\experiments\<round>\に配置されます。
モデル(ユーザー 2026-10-10、ラボ CLAUDE.md 裁定。原因 experiments/r22-haiku/REPORT.md): Haikuは上記のいずれのステップでも、指揮者としても作業者としても動画を制作しません。コンポーネントの固定コンテンツは制作としてカウントされます(ラボ D-T12)。
このスキルが与える可能性のある評決とその検証方法
- 「セクション変更がバー/ライン上にある」→ レンダリングされたMP4に対する
tools/measure_product.pyまたはtools/narrlock.py(ラボパス)。 - 「モーションがナレーション下で連続している」→
tools/density.pyの移動シェアと静止ラン。 - 「すべての数字/機能が本物である」→
tools/fidelity.py+build/claims.json(T05)。 - 「カメラムーブがある」→
tools/camflow.py。at_boundaryランはフレームルックが必要。 - 「ファイルが納品可能である」(読み取り可能、期待される長さ、サイズ、コーデック、サウンドが期待通りに存在し、現在ディスク上の入力からfilmitで書き込まれている)→
tools/filmkit/check.py(render.pyが自身で実行)。終了コード0はブロック行がないことを意味し、画像については何も意味しません。 - 「見栄えが良い / 参照と一致する」→ 決して数値からではありません。モデル読み取りフレームシートおよびユーザー自身の視聴(ラボINV-6)。数値はデータパスを証明し、画像を証明しません。エージェントレビューパスでは、この評決は決して与えられません: 動画は「エージェントレビュー下で納品され、ユーザーは視聴していない」(評決
user_watched: no)となります。 - 「ラウドネスがターゲットに達している」→
check.py --rules F --target NAME。許容差のないターゲットに対するUNDETは、合格ではなくルールファイルのギャップです。
納品形態(人間が動画を見なければなりません)
check.md のセクション1〜4(ブロッキング/確認済み/確認が必要/未決定)を原文のまま貼り付けます(セクション5、作者の宣言された免除はファイルに残します)。正式な動画の場合は、--profile delivery-web チェックからのもので、FK-R-18(デザイン軸マウント)とFK-R-19(ワークススタンプ)行がそれらの中に含まれ、さらに deliver/_review/report.md の reference: 行(rerun 行を含む)をチェックリストの前に貼り付けます。セッション自身の質問は別途続き、貼り付けられたセクションに混ざることは決してありません。正式な動画に対する transform.py 操作(normalize はfilmit M3以降に存在: transform.py normalize <in> --out <new> --target-lufs X --true-peak Y または --rules F --target NAME。duckとconvertは構築されていません)は、最初に質問し、作成する新しいファイルに名前を付けます。