mcpField
O
overlays

overlays

github.com/nextwork-projectsクリエイティブ・メディア13423 回インストール1 日前に更新
リポジトリ

overlays について

レンダリング済み動画の指定したビジュアル要素を変更し、承認済みの他の部分を維持する編集スキルです。ビジュアル計画を更新して静止画と出力を確認し、変更区間だけを再レンダリングしてレビューに回します。

主な機能

  1. 01時刻や内容によるビート特定
  2. 02ビジュアルの移動・拡大縮小・交換・削除
  3. 03新しいビジュアルビートの追加
  4. 04静止画と出力の確認
  5. 05変更区間のみのパッチレンダリング

活用シーン

  1. 01ロゴを字幕から離して配置
  2. 02指定箇所のビジュアルを差し替え
  3. 03追加したアニメーションや図の確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/nextwork-projects/ai-video-editor-cooked --skill overlays

インストール後、Claude Code で/overlaysを入力して読み込まれたか確認します。

同梱ファイルreferences/changes.md

詳細

オーバーレイ

パス:${CLAUDE_SKILL_DIR} はこの SKILL.md が含まれるフォルダー、${CLAUDE_PLUGIN_ROOT} はその 2 階層上にあるプラグインフォルダーを指します。

まず ${CLAUDE_PLUGIN_ROOT}/PRINCIPLES.md を読んでください。実在するものが各ビートを担い、AI らしい見た目にしないこと。多様さより滑らかさを優先し、各要素は話された言葉にぴったり合わせ、顔とセーフゾーンを決して覆わないこと。

ユーザーへの質問はすべて質問ボックスで行います。AskUserQuestion ツールを呼び出してください(選択肢は 2~4 個とし、推奨するものを最初にします)。そのツールがないエージェントに限り、テキストで番号付きの質問をします。

style-edit がすでにレンダリングした編集フォルダーです。同じ編集を、指定されたビートだけ変更して出力します。変更した箇所は再計画、確認、再レンダリングを行います。それ以外は、ユーザーが承認した状態から一切変更しません。このスキルはレンダラーのコードを書き換えません。変更するのは visuals.json と images.json で、残りは style-edit のスクリプトと Remotion のテンプレートが処理します。ある場面の新しいカードでは、まずユーザーが追加したものを使います(edits/<name>/assets.json:assets/ 内の画像、または site で指定したリンク。style-edit のステップ 1 と同じです)。その後に何かを探します。

Mac と Linux では python3、Windows では py でスクリプトを実行します。パスはライブラリからの相対パスです(PRINCIPLES.md の「Where」を参照)。S="${CLAUDE_PLUGIN_ROOT}/skills/style-edit/scripts"、 VPY="${CLAUDE_PLUGIN_ROOT}/lib/ai_editor/run.py"。python3 "$VPY" は仮想環境の Python です。

edits/<name>/plan.json + render.mp4 (+ render.plan.json, the plan it was made from)
visuals.json / images.json  ->  plan.py  ->  stills-at/sheet.png  ->  edit.py patch  ->  check.py render  ->  review page

references/changes.md には、あらゆる変更の種類と正確なコマンド、図解の手順、確認に失敗した場合の対応が記載されています。各ステップで指定されたセクションを読んでください。

0. 好みと編集内容を確認する

python3 "${CLAUDE_PLUGIN_ROOT}/skills/taste/scripts/taste.py" show --edit edits/<name>
python3 "$S/plan.py" cards edits/<name>

cards はカードごとに 1 行を出力します。card:N、時間、種類、単語、ボックス、レイヤー、および元になった visuals.json または images.json のビートが表示されます。card:N はレビュー画面の [card N ...] に対応します。スチル一覧シートの「card N」は card:N-1 に対応します。plan.json 自体は決して読まないでください。

  • render.mp4 または plan.json がない場合: 初回の処理です。style-edit を使ってください。
  • メモがカットについてのものの場合(単語が途中で切れている、一時停止など):カットスキルを使います。すべての動画に関する字幕のサイズ、フォント、色についてのものの場合: まず好みのスキルを使い、その後 style-edit を使います。
  • すべての動画に適用する好みについてのメモの場合(「ロゴは常に小さめに」「全画面の図解はなし」など):ここで修正し、好みのスキルでもルールを保存します。

1. ビートを特定する

ユーザーの言葉をカードに照らし合わせます。時間(「0:15 のところ」)、単語(「Duolingo のもの」)、レビューのメモ([card 1 logo 'Duolingo'])などを使います。明確に一致するものが 1 つなら続行します。2 つ以上、または一致するものがない場合は、質問ボックスで尋ねます。候補カードごとに 1 つの選択肢を提示し(時間、種類、単語を含めます)、最も近いものを推奨します。

ユーザーが指定したビートだけを変更します。途中で別のカードを選び直したり、移動したり、スタイルを変更したりしてはいけません。「カードを減らして」とだけ指定され、対象の名前がない場合は、登場頻度が最も低いカード(ちらっと映るロゴ、同じ画像の 2 回目の登場など)を列挙し、削除するものを尋ねます。最も弱いカードを推奨します。

2. 変更する

1つのビートにつき1つのコマンドを実行します。ビートは、card:N、時刻(0:15、15.4s、その時点で表示されているカード、または1.5秒以内に始まるカード)、もしくは単語(Duolingo、2回目に発話された場合はDuolingo@2)で指定します。

python3 "$S/plan.py" beat edits/<name> card:1 'box=[40,17,20,11]'      # move or resize (x, y, w, h in % of the frame)
python3 "$S/plan.py" beat edits/<name> 0:20 brand=Notion domain=notion.so   # swap the logo
python3 "$S/plan.py" beat edits/<name> YouTube@1 --drop                # fewer cards
python3 "$S/plan.py" beat edits/<name> --add edits/<name>/visuals.fill-1.json   # new beats, in spoken order

値はJSON(またはプレーンテキスト)です。props.label=xはビート内に設定し、key=nullはキーを削除します。キャプチャのビートはvisuals.jsonとimages.jsonの両方にあります。beatを変更すると、両方が変更されます。各リクエスト(移動、大きくする、顔から離す、字幕から離す、実際のページにする、スクリーンショットをアニメーション化する、滑らかにする、遅れて表示する)の内容については、references/changes.mdの「Requests」を参照してください。

新しいビジュアル(アニメーション、図、実際のページ)の場合:style-editの${CLAUDE_PLUGIN_ROOT}/skills/style-edit/references/motion-design.md(デフォルトの見た目と動き:静止画のキャプチャより作成したアニメーションを優先し、バンド内に大きく表示し、ページごとにキャプチャを1つにする)を読みます。そのうえで、発話内容に基づいて形式を選びます。選択の順序はstyle-editの${CLAUDE_PLUGIN_ROOT}/skills/style-edit/references/shapes.mdに従います(ユーザー自身の素材、実物をキャプチャしたもの、実物のパーツから再構築したUI、実際のロゴ)。図は、発話で言及された実際のロゴやキャプチャを使ったflowにし、各パーツを発話された単語に合わせて点灯させ、頭の横または上にオーバーレイとして表示します。話者は画面に残します(references/changes.mdの「A diagram」)。テキストパネル、文字だけのカード、ストックアイコン、またはユーザーが求めていない全画面のシーンは使用しません。新しいビートが複数ある場合は、処理を分担します。ビートごとにtemplate-fillerエージェントを1つ割り当て、全員に1つのメッセージで指示します。各エージェントには、編集フォルダー、そのビートの文、選択した形式、表示タイミングとなる単語、style-editのreferences/shapes.mdの完全なパス、および個別の出力ファイルedits/<name>/visuals.fill-<n>.jsonを渡します。その後、すべてのファイルを指定して1回のbeat --addを実行します。新しいビートが1つだけの場合は、自分で作成します。

3. 取得してから、再度計画する

node "$S/capture.mjs" edits/<name>          # only when a beat needs a new capture, logo or post; keeps files already fetched
python3 "$S/plan.py" edits/<name>/style.json edits/<name>/captions.json [--aspect ...] [--layout ...]

編集の直近の計画時と同じフラグを指定して計画します(2つ目のシェイプでは同じ--outを指定し、その後の各コマンドでは--plan plan-16x9.jsonを指定します)。plan.pyは決定的です。変更していないビートは同じ結果になります。plan.jsonを上書きする前に、レンダリング済みの計画をrender.plan.jsonとして保持します。自分のビートに関する警告をすべて読みます。プロファイルのbehindが有効で、背面カードを移動または追加した場合は、python3 "$VPY" "$S/matte.py" edits/<name>を実行します(新しいフレームのみを切り出します。カードが数秒より多い場合は、まず--estimateを指定して所要時間を確認します)。

python3 "$S/check.py" plan edits/<name>

自分のビートに関するFAILをすべて修正してから、再度計画します。

4. その瞬間だけの静止画

python3 "$S/edit.py" stills edits/<name> --at 15.4 --at 12.9-15.3

時刻を指定すると静止画が1枚、範囲を指定すると5枚(登場、定着、中間、後半、退出)が生成されます。これらのフレームで動くカードを評価します。変更したカードごとに、plan.py cardsで確認できる範囲と、そのカードの直前と直後の瞬間を指定します。stills-at/とstills-at/sheet.pngに出力され、各タイルには時刻と表示中のカードがラベル付けされます。シートを確認し、stills-criticエージェントにも渡して、そのブラインド評価のreads_asと、ビートで表示すべき内容を比較します。先に進む前に修正します。カードが顔に重なっている、字幕やアプリのボタンの下に隠れている、スマートフォンでは文字が小さすぎる、ページの間違った部分が表示されている、AIらしい見た目になっている、話者がフレームから消えている(誰も求めていない全画面のシーン)といった問題を解消します。

  • 修正(移動、サイズ変更、差し替え、削除)の場合は、ステップ5に進みます。
  • 新しいビジュアル(アニメーション、図、新しいページ)の場合は、シートを表示し、質問ボックスで次の選択肢を提示します: レンダリングする(推奨)/変更する。回答を受け取る前にレンダリングしないでください。

5. 差分レンダリング

python3 "$S/edit.py" patch edits/<name>

plan.jsonとrender.plan.jsonを比較し、変更された範囲のみをノートパソコン上で再レンダリングします(退出とサウンドの余韻のため、各範囲を0.5秒延長します)。その後、サンプル単位でサウンドをカットして、render.mp4に結合します。範囲とフレーム数が表示されます。動画の大部分が変更されている場合は全体をレンダリングします。また、変更が局所的でない場合(サイズ、見た目、動きの特性、字幕スタイル)は処理を停止します。その場合は、style-editのステップ6に従ってレンダリング先を尋ね、ステップ7に従ってレンダリングします。--range 13-15.5を指定すると、手動で範囲を再レンダリングできます(render.plan.jsonがない古いレンダリングの場合)。

6. レンダリングを確認する

python3 "$VPY" "$S/check.py" render edits/<name>

変更した箇所で FAIL になったら、ステップ 2 または 3 に戻ってください。修正は最大 2 回までです。その後、まだ一覧に残っている内容とともに引き継ぎます。変更した箇所から離れた箇所の FAIL は、変更前からあったものです。そう伝え、ここでは追いかけないでください。各 FAIL の意味については、style-edit references/plan.md「What the checks FAIL and WARN」を参照してください。

7. レビューページで引き継ぐ

R="${CLAUDE_PLUGIN_ROOT}/lib/ai_editor/review.py"
python3 "$R" edits/<name> resolve <note> fixed --reply "moved the Duolingo logo above the caption" --new-t 15.4
python3 "$R" edits/<name> round --stage edit --video edits/<name>/render.mp4 --plan edits/<name>/plan.json

まだページがない場合は、同じフラグを指定して start してください。その後、バックグラウンドで serve と wait を実行します(style-edit references/review.md)。変更内容と場所を、ユーザーに 1 行で伝えてください。カードについての新しいメモはここに戻し、カットについてのメモはカットスキルに送ってください。

スクリプトが停止した場合

メッセージ対応
no beat matches ...plan.py cards を実行し、card:N でカードを選びます
no render.plan.json ...(edit.py patch)変更したカードを含む --range A-B を指定するか、全体をレンダリングします
the change is not local (<key> changed)全体をレンダリングします。style-edit のステップ 6 と 7 を参照してください
the plan is WxH, N frames; render.mp4 is ...カットまたは形状が変わっています。全体をレンダリングします
warning: '<word>' ... never saidそのビートの word/nth は、captions.json にある表記と一致させる必要があります
capture.mjs failed <kind> '<word>'別の URL を使うか、代わりにロゴを使います
check.py plan found a FAIL(静止画)自分のビートの FAIL を修正し、再度プランを作成します
... missing (run matte.py)matte.py を実行してから、静止画またはパッチを再度実行します

ファイル

  • references/changes.md:各リクエストのビート変更、図のレシピ、失敗したチェック。
  • style-edit の scripts/:plan.py cards|beat(1 つのビートを検索・変更)、edit.py stills --at (各場面の静止画)、edit.py patch(変更箇所を再レンダリング)、capture.mjs、matte.py、check.py。
  • ${CLAUDE_PLUGIN_ROOT}/agents/template-filler.md(俳句、新しいビートごとに 1 つ)、stills-critic.md(sonnet)、 render-watcher.md(時間のかかる全体レンダリング)。

コメント