fix-my-look について
動画のシーン、服装、照明を変更しつつ、人物の同一性、動き、元の音声を保つことを目指すワークフロースキルです。フレームを編集して承認を得てから、動画セグメントへ変更を反映します。
主な機能
- 01ソース動画の最初の使用可能フレームを編集
- 02リファレンス動画で編集内容を反映
- 03人物の同一性、動き、音声を保持
- 04長い動画を分割して処理・結合
- 05長さ、音声、同一性を確認
活用シーン
- 01動画の背景を夜景やビーチに変更
- 02人物の同一性を保って服装を変更
- 03長い動画を連続音声付きで分割処理
MCP 対応
Pika MCP ツールで動画の正規化、画像編集、リファレンス動画生成、確認を行います。利用するツールのプレフィックスはセッションによって異なります。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ pika-labs/ pika-plugins --skill fix-my-lookインストール後、Claude Code で/fix-my-lookを入力して読み込まれたか確認します。
詳細
fix-my-look
ユーザーのプロンプトに基づいて、ソース動画で最初に使用可能なフレームを gpt-image-2 で編集し、
元の動画と音声を参照として使いながら、元の顔、動き、音声を固定して、
kling の reference-video でその見た目をクリップ全体に適用します。準備処理は、短いクリップでは 1 回の
normalize_video
呼び出しで、長いクリップではセグメントごとに 1 回の normalize 呼び出しで行います。出力のアスペクト比には、正規化されたクリップに最も近いサポート対象の出力比率を使用します。この
スキルはソース動画のフレームを再調整しません。
入力
<source>— 音声付き動画ファイルのパスまたは URL<change_prompt>— 変更内容(例:「ネオンライトのある夜にする」、 「シャツをレザージャケットに変える」、「ハワイのビーチにいるようにする」)
引数なしのメニュー
- 「ソース動画のパスを教えてください。」
- 「何を変更しますか?(例:「ビーチにいるようにする」、「夜にする」)」
ワークフロー
作業ディレクトリ:~/Downloads/fix-my-look/<run-id>/。
ステップ 0 — コスト、タイマー、タスク ID
以下に記載するツールはすべて Pika MCP ツールで、プレフィックスを付けずに記載しています。お使いのセッションで公開されている Pika MCP のプレフィックスを付けて呼び出してください。
ソースと変更プロンプトが確定したらタイマーを開始します。有料の生成を行う前に、予定している
generate_image_edit、
generate_reference_video、複数セグメントの
edit_concat、および任意の音声/リップシンク修復
呼び出しについて estimate_cost を呼び出します。ホストからコストが提示されない場合は、推測する代わりに、最終報告で
Cost not surfaced by this harness
と伝えてください。ツールから
task_id が返されたら、正確な値を実行メモにコピーし、そのまま再利用してください。長い JWT 形式のタスク ID を手入力しないでください。
ステップ 1 — クリップを準備する
ローカルファイルの場合は、最初に upload_asset でアップロードします。HTTPS のメディア URL
はそのまま渡せます。正規化する前にソースの区間を決めます。15 秒以下のソースでは 14.8 秒の
区間を 1 つ使用し、それより長いソースは順序どおりの 14.8 秒区間に分割します。各区間につき 1 回、
normalize_video(video_url=<source>, start_s=<offset>, max_duration_s=14.8, extract_audio=true, extract_face_frame=true)
を呼び出します。最初の区間の face_frame_url は編集する静止画に使用し、各区間の video_url は、そのセグメントの動き/本人性を参照するために使用します。複数区間のクリップでは、最終的に結合した出力にソースの連続した音声トラックを復元できるよう、
extract_audio_from_video(video_url=<source>)
も呼び出します。
結果を以降の処理に渡します。face_frame_url はステップ 2 の編集対象です。
各正規化済み video_url は、ステップ 4 で Kling の参照として使用します。各 normalize 結果について、
aspect_ratio = result.aspect_ratio ?? result.closest_aspect_ratio
を設定し、そのローカルな aspect_ratio を画像および動画の呼び出しに引き継ぎます。どちらのフィールドもない場合は、停止して、正規化の出力にアスペクト比のラベルがないことを報告します。セグメントごとに
duration = max(4, min(15, round(duration_s)))
を計算し、ユーザーが高解像度を指定していない限り、
resolution="720p"
を使用します。face_found が false の場合、顔がはっきりと検出されず、face_frame_url は t=0 のフレームにフォールバックしています。そのまま進めてもかまいませんが、本人性がずれる可能性があることを警告してください。または、被写体がカメラを向いている区間の start_s を指定して再実行してください。
参照動画プロバイダーは、サイズの大きすぎる参照アセットを拒否する場合があります。正規化の結果または後続のプロバイダーエラーで、正規化済み動画がプロバイダーの上限を超えていると分かった場合は、同じ start_s、max_duration_s、extract_audio、extract_face_frame の値を使い、
crf=28
を指定して normalize_video を 1 回だけ再試行してください。それでも参照動画が大きすぎる場合は、有料の動画生成をそれ以上試さずに停止し、
normalize_video にはワーカー側で 1080 エッジ/
参照サイズの上限設定が必要であることを報告してください。ローカルのシェルメディアコマンドでこの問題を回避しないでください。
ステップ 2 — gpt-image-2 でフレームを編集する(「変更」ステージ)
generate_image_edit を、provider="gpt-image-2"、
aspect_ratio=<aspect_ratio>、resolution="2K"、
images=[<face_frame_url>]、quality="high"、次のプロンプトで呼び出します。
「参照写真を次のように変更してください:
<change_prompt>。人物の顔、身元、髪、体、ポーズは参照写真と完全に同じ状態に保ってください。 重要:人物が持っている、または触れている物(スマートフォン、 製品、飲み物、バッグ、小道具、ジュエリー)はすべて、同じ手、 位置、向き、サイズのまま維持してください。決して削除、置換、 スタイル変更しないでください。人物そのものではなく、指定された シーン、背景、服装、照明、環境だけを変更してください。」
再レンダリングのたびに「持っている物を維持する」という節を一字一句そのまま含めてください。これがないと、gpt-image-2 は人物が持っている製品やスマートフォンを、気付かれないまま削除します。
gpt-image-2 がファッション、グラマー、美容のプロンプトをコンテンツポリシー違反と誤判定した場合は、「洗練されたイベントスタイル、透けない服装、自然なポーズ、性的でないファッションポートレート」のように、同じ意図を保ちつつ控えめでエディトリアルな表現にして、一度だけ再試行します。メイクのプロンプトでは、元の目の形、まぶた、虹彩の色、視線を明示的に維持してください。濃いアイライナーやアイシャドウは、身元が変わってしまうリスクが高い要因です。
ステップ 3 — 編集したフレームを表示し、承認を待つ
編集したフレームを表示して、そこで停止します。「動画を生成してよいですか?それとも調整して再レンダリングしますか?」と尋ねます。承認されるまで動画生成を呼び出してはいけません。調整が必要な場合は、ステップ 2 を再実行し(固定された節は一字一句そのままにして)、ループします。
ステップ 4 — Kling の参照動画で編集を反映する
正規化された各セグメントについて、generate_reference_video を次の設定とプロンプトで呼び出します。provider="kling"、reference_videos=[<segment video_url>]、
reference_images=[<edited_frame_url>]、aspect_ratio=<aspect_ratio>、
duration=<segment duration>、sound=false、video_keep_sounds=[true]。
「<<<image_1>>> に示されている変更を <<<video_1>>> に適用してください。<<<video_1>>> の人物の顔、身元、表情、動き、タイミングはまったく同じ状態に保ってください。元の動画の維持対象のサウンドトラックも維持してください。新しいシーン、背景、服装、照明は <<<image_1>>> に合わせてください。重要: 人物が <<<video_1>>> で持っている、または触れている物(スマートフォン、 製品、飲み物、バッグ、小道具)はすべて、すべてのフレームで同じ手と向きのまま維持してください。人物が話している場合は、最後のフレームまで口の動きを続けてください。人物の身元を変えないでください。」
追加のクリエイティブな指示(例:「非常にシネマティックに、柔らかな金色の光」)があれば、固定テキストの後に追加します。固定テキストを置き換えてはいけません。
動画入力を使う場合、Kling に sound=true を渡してはいけません。この組み合わせは Kling に拒否され、error:1201 sound on is not supported with video input が返されます。元動画の音声を維持するには、sound=false と video_keep_sounds=[true] を使用してください。
ソースが複数のウィンドウに分割された場合は、edit_concat(video_urls=[<segment outputs in order>]) を呼び出します。
連結後、統合した出力の音声が欠落している、ずれている、または途切れている場合は、
edit_audio_replace(video_url=<concat_url>, audio_url=<full_source_audio_url>, duration_policy="video") を実行します。
Seedance を試すのは、ユーザーから明示的に指定された場合、または Kling が失敗し、別のプロバイダーを試す価値がある場合に限ります。同じセグメント分割ルールを使用し、Seedance が入力を拒否したり、発話や動作を欠落させたりした場合は、プロバイダーのエラーをそのまま記録します。
非同期処理:呼び出しが {task_id, status} エンベロープを返した場合は、終端状態になるまで task_status({task_id}) を短い間隔で繰り返しポーリングします。
ステップ 5 — 音声、長さ、本人確認の QA
成功を報告する前に、生成された動画をソースと照合して確認してください。
- 動画の長さが大幅に途切れていてはなりません。出力時間が、意図したソース範囲または結合したソースの長さと 0.5 秒を超えて異なる場合は、実行を失敗/要フォローアップとして記録してください。
- ソースに音声がある場合、末尾まで音声が含まれており、発話が終わる前に口の動きが止まっていないことを確認してください。音声が欠落している、音声が不明瞭、無音、または目に見えて同期がずれている場合は、実行を
PASSと判定しないでください。 - 承認済みのフレーム修正が動画にも反映されている必要があります。プロバイダーが、除去した眼鏡の反射などのアーティファクトを再び表示した場合は、反映に関する注意事項として記録するか、より強く承認されたフレームから再レンダリングしてください。
- 開始、中間、セグメント境界、終了の各時点で本人確認を行ってください。Kling が動きを維持した一方で顔を変えてしまった場合は、合格とせず、プロバイダーの制限として明記してください。
動画の見た目は許容範囲でも、発話音声が欠落、不完全、またはずれている場合は、有料の修正を 1 回提案してください。
edit_audio_replace(video_url=<generated_video_url>, audio_url=<full_source_audio_url or segment_audio_url>, duration_policy="video")edit_lipsync(video_url=<audio_restored_url>, audio_url=<full_source_audio_url or segment_audio_url>, variant="v2-pro")
モデルが終盤で口を止めた場合は、自動的に sync-3 へのエスカレーションを続けないでください。リップシンクでは、口の動きがない顔のトラックを確実に復元できません。代わりに、トリミングまたは再生成を提案してください。
ステップ 6 — ダウンロードして返却
結果を ~/Downloads/fix-my-look/<run-id>/result.mp4 にダウンロードし、そのパスと最終レポートの項目(ソース、編集済みフレームの URL、最終動画の URL、プロバイダー、ジョブ/タスク ID、コストの見積もりまたは not surfaced、所要時間、QA メモ、フォローアップが必要な問題)を返してください。
失敗時の対応
| 症状 | 原因 | 対処 |
|---|---|---|
| 出力の顔が元画像から変わってしまう | gpt-image-2 が顔を過剰に編集した、またはプロバイダーが元動画の重み付けを弱くした | 「顔を同じに保つ」という指示を強めて Step 2 を再実行し、change_prompt を控えめにしてください。 |
| 出力が元画像と同じに見える(変化がない) | 編集後の画像が元画像に似すぎている、または編集後の出力ではなく未加工のフレームを渡した | より大胆なプロンプトで Step 2 を再実行し、編集済みフレームの URL を確認してください。 |
| 出力のアスペクト比が元動画と一致しない | 元動画のアスペクト比が {16:9, 9:16, 1:1, 4:3, 3:4} に含まれていない | Step 1 は aspect_ratio を返します。古いワーカーペイロードでは closest_aspect_ratio を返します。これを最も近い対応済み出力ラベルとして使い、特殊なアスペクト比の場合はユーザーに確認してください。 |
| プロバイダーが正規化済み動画を大きすぎるとして拒否する | 4K/iPhone のソースでは、正規化後の出力が大きすぎる場合があります | crf=28 で正規化を一度再試行してください。それでも大きすぎる場合は中止し、1080 エッジ/参照サイズの上限についてワーカーへのフォローアップを起票してください。 |
| 長いソースから最初の短い区間しか返されない | 呼び出し元が max_duration_s=14.8 で一度だけ正規化し、セグメント分割を省略した | 14.8 秒の区間に分割し、各セグメントを生成した後、順番に edit_concat し、必要に応じて元動画の音声全体を復元してください。 |
| 話しているクリップで音声が失われる、単語が抜ける、または終盤で口が動かなくなる | プロバイダーがソースを保持せずに音声を再生成した、または顔トラックに動きを付ける口の動きがない | 合格扱いにしないでください。edit_audio_replace と edit_lipsync を使った修正を一度提案してください。終盤の口の動きが止まっている場合は、トリミングまたは再生成を提案してください。 |
| 承認されたフレームの修正が動画に反映されない | プロバイダーの反映処理によって元のアーティファクトが再度持ち込まれた | より強く修正した承認済みフレームから再レンダリングするか、プロバイダーの反映に関する注意点として明記してください。フレームの修正が反映されたと主張しないでください。 |
Kling が error:1201 sound on is not supported with video input で拒否する | 動画参照と一緒に sound=true が渡された | sound=false と video_keep_sounds=[true] を指定して Kling の呼び出しを再試行してください。Kling の動画入力では reference_audio を使用しないでください。 |
| Kling の出力が正規化済みソースより短い | プロバイダーが短いレンダリングを返した、または呼び出し元が誤ってトリミング済みの参照を渡した | 合格扱いにしないでください。出力の長さを正規化済みソースと比較し、そのセグメントを再生成するか、より短い区間を指定するようユーザーに依頼してください。 |