モーショングラフィックス編集+編集インターフェース
ユーザーとはその言語で会話してください。キャプションは話者の正確な言葉で書き、言い換えはしないでください。
パス: ME = このスキルフォルダ, W = 動画ごとのプロジェクトフォルダ。全スクリプトはbash/python/node; scripts/env.sh でffmpeg, node, python, Chrome, バンドルエンジン(engine/)のパスを取得。初回: READNE.md → インストール(スキルフォルダで npm install, pip install -r requirements.txt)を参照。
ルール(譲歩不可)
- 公式ロゴのみ ブランド名が言及された場合 — 再描画した「インスパイア」アイコンは不可。ブランドのWebサイト(
capture_site.js)から取得するか、ユーザーに尋ねること。 - ブランドチャーター: クライアントの場合、色、フォント、ロゴをWebサイト(
captures/info.json)から読み取り、パレットをparts/top.jsの先頭に記述。ユーザー自身の動画の場合は、一度チャーターを尋ねてtheme.json+top.jsに保存。 - Webサイトキャプチャ: クライアントのサイトをキャプチャ(全ページ、デスクトップ+モバイル)し、パネル内で使用(スクロールするブラウザ、トリミングした公式イラスト)。Cookieバナーは非表示にし、決して受け入れないこと。ログイン後のプロダクト画面には到達不可: その旨を伝え、ユーザー提供のスクリーンショットを統合する提案を行う。
- リズム: フルスクリーン ↔ パネル(ズームアウトでイン、ズームインでアウト)、強調語へのパンチイン(約2〜3秒に1回)、ちょうど1つのシグネチャーモーメント(ロゴ/名前リビール)、BGMは音声にダッキング、効果音(ズームごとにウッシュ、ポップ、クリック、タイピング、リビール時にインパクト)、ジャンプカット時にライトフラッシュ。
- 有料広告: 上部14%(y < 270)および下部 y ≈ 1250(リール/TikTok UI)に重要な要素を配置しない。キャプションは高めに設定(
CAPDY)。パネル内にはキャプションを入れない(パネル自体が言葉をタイトルとして表示)。エンドカード = ブランドロゴ + URL + 話者の言葉。虚偽の主張や数字は作成しない。 - キャプション は決して顔の上に配置しない。LTR言語 →
projet.jsonで"sens": "ltr"(ビルドで語順を修正)。RTL(アラビア語)→"rtl"。ブランド名はピル形状(fx: "pill", 色はprojet.json → pill)。 - ミックス: ユーザーがエディタで音声/音楽/効果音を設定。デフォルト: 音声100%, 音楽46%, 効果音36%。常に-14 LUFSにラウドネスノーマライズ。
- すべてのアニメーションはレジストリの要素(下記参照)であるため、ユーザーは選択、移動、非表示、コメント付けが可能。レジストリ外のアニメーションは禁止。
- アンカー: すべての
wS(card, word)は、そのアニメーションが示す単語を指していなければならない —scripts/ancres.pyを実行しテーブルを読むこと。インデックスは決して推測しない。
ワークフロー
- 準備:
bash $ME/scripts/preparer.sh <video> <W> <lang> "<Whisper プロンプト: 固有名詞>"→ コピー元、フルフレームクロップ、フレーム、カット候補、単語レベルの文字起こし。次に背景の人物切り抜き(~1秒/フレーム;同じ時間にWhisperを実行しない — RAM):python $ME/engine/mask.py u2net_human_seg <W> && python $ME/engine/make_head.py <W>。 - クライアント(いる場合):
node $ME/scripts/capture_site.js <url> <W>→captures/,assets/logo-*.png, 色/フォント。キャプチャを確認し、有用なビジュアルをW/assets/にトリミング(イラスト、スクロールブラウザ用の長いページなど)。 - キャプション:
W/cartes.json(正確な単語 + Whisperのタイミング; 2〜5単語のカード;hot,fx)を記述 →python $ME/scripts/cartes.py <W>。テンプレート:templates/cartes.EXAMPLE.json。 - 編集計画: スクリプトをビート(フック、問題、製品、証明、CTA…)に分割し、各ビートに対して: フルスクリーンかパネルか、表示する具体的なオブジェクト、1つのシグネチャーモーメント、音響。
W/plan-montage.mdに記述(テンプレートtemplates/plan.EXAMPLE.md)し、アニメーション前にユーザーに簡潔に提示。 - projet.json(テンプレート
templates/projet.EXAMPLE.json):nom,titre,langue,sens,outro,vol,musique_gain,pill,coupes,cadrage(パネルに入るショット → 測定ウィンドウ),cadrage_force(マスクが背景を捉えた場合)。次にpython $ME/scripts/framing.py <W>。 - W/parts/ 内のシーン:
top.js←templates/top.EXAMPLE.js(パレット,CUTS/SEGB,PANELS, ズームZP,CAPDY);primitives.js←templates/primitives.js;gfx.js←templates/gfx.EXAMPLE.js(SCENES_ED, アニメーションごとに1つのEL(...), レイヤー, エンドカード, フォント)。 - 音響:
W/sons.json(テンプレートtemplates/sons.EXAMPLE.json):musique{bpm, intro_filtree, coupure = リビール前の無音, accords} とevents=[element|null, time|"fin+x", "音[:パラメータ]", gain, [繰り返し, 間隔]]。音: pop, bulle, clic, shutter, succes, buzz, tick, touche, impact, tape, whoosh_in:持続時間, whoosh_out:持続時間, ding:周波数:持続時間, shimmer:持続時間, riser:持続時間, souffle:持続時間。各音を対応する要素にリンクし、要素が移動または非表示になったとき音も追従するようにする。 - アンカー:
python $ME/scripts/ancres.py <W>。 - プレビュー:
python $ME/scripts/build.py <W>次にnode $ME/engine/04_render_frames.js <W> preview t1 t2 …→ コンタクトシート → 厳しい編集者のようにレビュー(読みやすいか?顔がはっきり見えるか?広告の安全ゾーンは?)し、修正してからレンダリング。 - レンダリング:
bash $ME/scripts/rendu.sh <W>(バックグラウンド、3〜6分)→<nom>.mp4(+.srt/.txt)、ステムはmixage/pistes/、エディタ用メディア。MP4の6〜8フレーム、-14 LUFS、サイズを確認。 - エディタ:
python $ME/scripts/editor_server.py <W> <port>を実行(Claude Codeデスクトップの場合:.claude/launch.jsonに追加し、プレビューツールを使用)、http://localhost:<port>/editeur/を開く。プレビュー、クリック選択、再生が機能することを確認。 - コメント監視:
W/comments.jsonを監視し、status == "à faire"の新しいコメントごとに1行を出力(コマンドはreferences/editor.mdに記載)。
コメントの処理
- コメントを読む(
target=el:<id>|scene:<id>|cap:<n>|audio:<track>,t, クリックx,y)。 - ステータスを "en cours" に設定:
POST /api/comments/status {"id":…, "status":"en cours"}。 parts/gfx.js(またはズーム/パネルならtop.js、キャプションならcartes.json、音響ならsons.json)の要素を変更し、チャーターとレジストリの範囲内に留める。リクエストが曖昧な場合は最適なオプションを適用し、返信で代替案に言及する。python $ME/scripts/build.py <W>(音響が変わった場合はsons.pyも)→ エディタは自動でプレビューをリロード。1〜2フレームのプレビューを確認。- ステータス "fait" + 短い
reply(変更内容) — エディタに表示。ユーザーに「動画をレンダリング」をクリックできることを伝える。 - 一般的な設定(「Xは絶対に使わない」)→ このファイルのルールに追加する。
要素レジストリ(エディタとの契約)
EL(id, name, scene, layer, [x,y,w,h], ()=>[start,end], t=>{…描画…})
layer:'panel'(パネル内、飛び出しヘッドの背後に描画) ·'full'(フルスクリーン、前面) ·'none'(グローバル: フラッシュ、エンドカード)。- 受け取る
t= エディタによってシフトされた時間(EDITS.off)。自分のウィンドウ内でのみ描画;EDITS.hide[id]が true なら非表示。 - ボックス
[x,y,w,h]はプレビューでのクリックに使用: 正確に保つこと。 SCENES_ED= エディタ左側に表示されるシーン(id,label,a,b,kind)。- ズーム: 各
ZPエントリは要素zoom<i>(エディタで削除可能)。
プロジェクトファイル
projet.json · cartes.json → caps.json(caps.orig.json = エディタベース) · sons.json · parts/{top,primitives,gfx}.js · framing.js · edits.json(エディタ設定: off, hide, caps, vol) · comments.json · captures/, assets/ · mixage/pistes/ · editeur/ · <nom>.mp4/.srt/.txt。