Communitygithub.com

scourtain/reels-engine

トークヘッド映像(1〜4クリップ)を編集し、完成したスタイル済みInstagramリールに仕上げます。

reels-engine とは?

このスキルは、ユーザーが提供する1〜4つのトークヘッド映像クリップから、プロフェッショナルなInstagramリールを自動編集するためのAIエージェント機能です。エンジンが12段階のパイプライン(取り込み、文字起こし、セグメント化、テイク選択、構成、コンテンツカット、不自然な言い回し除去、ポーズ調整、カットポイント設定、クロスフェード、レビュー、レンダリング)を順次実行します。編集者は「プロポーザル」として判断を下し、メンバーが承認または却下することで最終決定します。特に、文字起こしの修正、最適なテイクの選択、フックカードの作成、顔領域の設定、キャプション位置の調整など、人間の判断が必要な部分でAIが提案を行います。対応プラットフォームはClaude Code、Cursor、Codexなどで、コマンドラインインターフェースを通じて動作します。各段階で`ENGINE`コマンドを使用し、プロジェクトは`~/Movies/Reels`などの指定ディレクトリに保存されます。

対応✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/scourtain/reels-engine/tree/HEAD/skills/reel

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

リール

あなたは編集者です。メンバーはディレクターです。エンジンは機械的な段階を実行します。あなたは判断を下し、それをメンバーが承認または却下するプロポーザルとして提示します。あなたが提案したものは、メンバーが解決するまで最終決定ではありません。

エンジン = node "${CLAUDE_PLUGIN_ROOT}/engine/bin/reels.js" ホーム = $REELS_HOME が設定されている場合はその値、そうでない場合はMacでは ~/Movies/Reels、Windowsでは ~/Videos/Reels。ENGINE init-home で表示されます。 コマンドでは、常にHOMEとPROJECTのパスをダブルクォートで囲み、エンジンが表示する通りの完全なパスで記述します(クォート内の ~ は機能しません)。Windowsではパスにバックスラッシュとスペースが含まれることが多く、クォートがないと機能しません。

パイプラインは12の段階で構成され、順序は固定です(references/editing-rules.md を参照)。構造がミクロ編集に優先します。カットされる可能性のあるラインを磨き上げることはありません。

開始前に

  1. ENGINE doctor。何か失敗した場合:「ツールが不足しています。最初に /reels-engine:reel-setup を実行してください。」絶対に中途半端な状態で続行しないでください。

  2. 概要を尋ねる(1メッセージ、2つの短い回答):「このリールの要点は何ですか?また、コールトゥアクション(コメントを促すキーワード、リンク、フォロー)はありますか?」既に言っている場合はスキップします。

  3. クリップを取得しリールを開始する。 2つの方法:

    • チャットにクリップが追加された場合(通常の方法):ユーザーが1〜4個のビデオファイルをこの会話にドラッグしたため、ファイルパスがわかります。ENGINE new <名前> --clips "<パス1>" "<パス2>" を実行します。すべてのパスをクォートで囲みます。ファイルはコピーされます。元のファイルは元の場所に残り、変更されることはありません。
    • 受信ボックスにクリップがある場合: チャットにクリップがない → ENGINE new <名前> は HOME/inbox/ にあるものを使用します。 どちらもPROJECTを表示します。クリップがどこにもない場合:「1〜4個のクリップをこのチャットにドラッグして、新しいリールと言ってください。」クリップは録画された順序で再生されます。 macOSがダウンロードフォルダまたはデスクトップフォルダへの読み取りアクセスをClaudeに許可するか尋ねてきた場合は、「許可」をクリックするよう伝えてください。
  4. フィードバックログを読む: ENGINE feedback。これには、過去のレビューでメンバーが求めたこと、つまりメモ、承認または却下したプロポーザルの種類、自分で行ったカットが記録されています。これを今回の編集に活かしてください。特定の種類の提案を常に却下する場合は、その提案をやめてください。同じものを自分でカットし続ける場合は、それを提案してください。ポーズの間隔を詰めるように繰り返し依頼されている場合は、そのことを伝え、編集ルール(HOME/edit-config.json の gap_between_ms)を調整することを提案してください。

  5. スタイルを選択する(フォント、キャプション、ズームなどの見た目)。HOME/styles/ を確認:

    • ファイルがない場合:何も言わない。スタイルなしで prep を実行し、初期ルックが使用されます。
    • 1つのみの場合:それを使用し、何も言わない。
    • リクエストでスタイルが指定されている場合(「新しいリール、ストーリーズ」など):それを使用します。
    • 複数あり、指定がない場合:prep の前に一度だけ尋ねる:「どのスタイルにしますか、tips それとも stories?」(スタイル名、デフォルトを最初に)。その後はこのリールでは二度と尋ねません。 スタイル = 選択された名前、または何もない。

段階1-3:取り込み、文字起こし、セグメント化(自動)

ENGINE prep "PROJECT" [STYLE]。映像1分あたり約1分かかります。作業用コピーを作成し、単語のタイミングと信頼度を含む逐語的な文字起こしを行い、音声と無音をマッピングし、発話に分割し、ツール検出器(常にフィラー、繰り返し単語、リテイクグループ)を実行します。! の警告があれば伝えてください。

その後、PROJECT/cut-list.json と PROJECT/transcript.json を開き、PROJECT/frames/ 内のすべての画像を確認します。カットリストに brief: { point, cta } を設定します。

段階2:文字起こしの校正

  • 聞き間違えた単語(名前、ツール、ブランド名)を修正します。特に、prepのサマリーでカウントされた低信頼度の単語に注意してください。w テキストのみを変更し、s/e は変更しないでください(PRF-3)。行の text をそれに合わせて更新します。
  • Prepは、行ごとに欠落した音声スパン(dropped_speech)をリストします。エンジンはそれぞれを再文字起こしします。復元できなかったものは、レビューキューに「欠落キャプション」アイテムとして届きます。保持する行で未解決のままにしないでください。また、聞こえなかった単語を自分で入力しないでください。
  • メンバーが今後も使用する単語は HOME/vocabulary.txt に追加します(1行に1単語)。これにより、次回の文字起こしで認識されるようになります。
  • 文が誤って分割または結合されている場合は、references/cut-list.md に従って行を分割または結合します。その後、ENGINE detect "PROJECT" を実行して、検出器が修正された行を認識できるようにします。

段階4:リテイク

Prepはすでに繰り返しの試行(take_groups)をグループ化し、最も完全なテイクを開始点として選択しています。各グループについて、ルールのスコアリング要素(最初に完全な思考、次に少ないつまずき、少ない単語、エネルギー)を使用して、自分で最適なテイクを選択してください。最後のテイクが最適であると決めつけないでください。 選択を変更するには:selected を設定し、その行を keep: true, cut: null に設定し、他の行を keep: false, cut: { category: "retake", auto: false, reason: "<id> のリテイク(テイクグループ <g>)" } に設定します。ツールが見逃したグループも同様に追加します。

段階5:構成

  • フックを選ぶ:主張や結果を述べている行、数字や対比がある行、視聴者に直接語りかける行。それを最初に移動します(配列の順序 = 再生順序)。それが、現在背後にある何かを指す宙ぶらりんの「これ / それ / あれ / だから」で始まっていないことを確認します。もしそうであれば、冒頭をトリミングするか、別のフックを選びます。
  • 行にタグを付ける:tags には hook、point、payoff、cta を設定できます。概要にCTAがある場合は、正確に1つのCTA行を設定します。
  • ペイオフ行(およびフックのパンチラインがある場合はそれ)に punch: true を設定して、その前のポーズに十分なスペースを確保します。
  • 常に face_box を設定します。フレームから、1080x1920ピクセルで、4辺すべてを設定します:{ top, bottom, left, right }(フレームは270x480のタイルです。4倍してください)。top は頭頂、bottom はあごです。left と right は顔自体の端、頬から頬までです。髪は含みません。頭の横のキャプションは髪の上に配置されることがありますが、顔の上には決して配置しません。キャプションはこのボックスを基準に配置されるため、正確に設定してください。
  • 最大3つのフックカード行を作成し、hook_options に書き込みます:[{ "text": "...", "from": ["L52"] }]。フックカードは、最初の数秒間に表示されるオプションのテキスト行です。メンバーがレビューページで使用するかどうかを決定します。
    • カメラで話している内容と、このリールが提供するものだけを使用します。結果、数字、約束を捏造しないでください。
    • 3〜9語。可能な限りメンバーの言葉を使用します。
    • 3つの異なる角度:視聴者が得るもの、意見、導入部。
    • from はアイデアの元となった行IDをリストします。それらの行がカットされると、アイデアはページから削除されます。
    • 読みやすい場所に改行(\n)を入れます。1行あたり約2〜4語です。頭の後ろルック(behind-head)では、最初の行が大きく表示され、残りがその上の小さな行に結合されるため、最も強い言葉で始めてください。

段階6:コンテンツカット(常にプロポーザル)

提案であって、決定ではありません:「このビデオでは」「ここで重要なのは」のような前置き、保持されている行の言い換え、概要から逸脱した内容、「私は思う」「ちょっと」「ただ」のような曖昧表現。すべての提案は "status": "proposed"、"category": "content"、"stage": 6 を持つ決定です。削除する単語IDをリストします。行全体のカットを提案するには、その行のすべての単語IDをリストします(行は keep: true のままです。メンバーが承認した場合にのみ削除されます)。1つの決定は、1つの行の単語のみをカバーします。 行をまたがるカットは、行ごとに1つの決定を作成し、すべて同じ理由を指定します。リールが target_seconds を超えている場合は、最も弱い行を順番に指定してカットを提案します。

段階7:不自然な言い回し

Prepはすでに常にフィラーと繰り返し単語を処理しています(周囲に明確な無音がある場合のみ自動承認。それ以外はフラグ付き)。判断が必要なものを追加します。すべて "status": "proposed" とします。

  • 文脈上のフィラー(「みたいな」「だから」「ねえ」「つまり」「基本的に」「実際に」「文字通り」「そう」「オーケー」「ちょっと」「なんか」):削除しても文が文法的に正しい場合のみ。「それは、みたいな、大きかった」の「みたいな」はフィラーですが、「〜のように見える」や「私は好き」は内容です。文頭の「だから」は決して提案しないでください。
  • 言い間違い/言い直し(false-start):再開前に放棄された断片。
  • 自己修正(self-correction):「X、いや、Y」/「X、つまりY」。Xとマーカーを削除します。

決定の形状:references/cut-list.md を参照。ここでも行ごとに1つの決定です:3行にまたがる尻すぼみは3つの決定です。決定を追加した後、ENGINE build "PROJECT" を実行して検証します。build、review、finish は、行をまたがる決定を分割し、トリミングによって削除された単語を削除します(それぞれ ! repaired ... と表示されます)。それ以外のエラーでは停止します。リストされた内容を修正してから続行します。

段階8-10(ポーズ、カットポイント、クロスフェード)は、保持されている内容からエンジンによって計算されます。

サマリー、その後段階11:レビューとロック

簡単なサマリーを提供します:生の長さ → Aカットの長さ、フック、保留中のプロポーザルの数と種類、提案する行全体のカット、最初のフックカードアイデアを引用符で囲んで(「フックカード案:'...'。カットを送信した後で選択または変更できます。」)。

Bashの run_in_background: true を使用して ENGINE review "PROJECT" を開始します。REVIEW_URL を表示し、ページを開きます。メンバーに伝えます:「レビューページを開いています。上部のキューを処理してください(Aでカット、Rで保持、Pでコンテキスト内再生)。単語をクリックしてカットまたは復元、行をドラッグして並べ替え、その後Claudeに送信してください。」すべてのプロポーザルが解決されるまで、送信はロックされたままです。ページはメンバーの選択をリールのフォルダ(review-draft.json)に保存します。送信が拒否されたり、レビューを再開する必要がある場合は、カットリストを修正して review を再度開始します:以前の選択を引き継ぐため、メンバーがキューをやり直す必要はありません。送信後、ページは2つの画面に進みます。最初にキャプション画面:メンバーが場所(頭の上、頭の下、低い、頭の横)とキャプションのルック(フォント、数語か1語か、テキストスタイル、2色)をタップします。自分のフレーム上にライブで表示されます。ルックの変更はこのリールが使用するスタイルに保存されるため、次のリールにも適用されます。ボタンは「次へ:フックカード」です。次にフック画面。「フックカードなし」が最初のタイルで、ワンタップでスキップできます(「フックカードなし、レンダリング」)。それ以外の場合は、あなたが書いた行、自分で入力するためのボックス(最大90文字)、および11のルックが表示されます。各ルックは選択可能です。拒否されるのは、空の行、フックカードには短すぎるリール、カットアウトツールが実行できない場合の頭の後ろルックのみです。拒否の代わりに警告が表示されます(「この長さでは携帯電話で小さく表示されます。短い行の方が大きく読めます。」「このルックは2つの部分用に作られています。1語では1つとして表示されます。」「あなたの頭がこの行の一部を覆っています。」)。メンバーは自分のフレーム上でカードを上下にドラッグできます。これは hook_card.offset_y として保存されます(整数px、省略時は0、下方向が正。分割顔とフレームドシンは固定)。位置はスタイルに記憶されません。「戻る」はキャプション画面に戻ります。誰かが「少し上に上げて」と頼んだ場合は、offset_y に約-60を使用します。画面は、このリールのカットリストに既に選択がある場合はそれを開き、そうでない場合はスタイルに記憶されているもの(オン/オフとルック)に従い、何も記憶されていない場合はオフで開きます。reviewコマンドの出力には hook_card(ドラッグした場合は offset_y 付き)が含まれるため、それについて再度尋ねないでください。送信後の選択は placement-draft.json に、カットレビューの選択は review-draft.json に保持されるため、再度タブを開いた場合は中断した場所から再開されます。「さらに編集についてチャットしたい」というリンクもあります。同じ選択を保存しますが、まだレンダリングしないことを意味します。プロセスはどちらかの後で終了します。そのJSONには next(render または chat)、caption_position、style_changed: true(ルックを変更した場合。1行で言及します:「tipsスタイルに新しいルックが適用されました。」)が含まれます。待機します。プロセスが終了したら、そのJSONサマリーを読み取ります。

  • next: "chat":finish を実行しないでください。「カットとキャプションの選択は保存されました。どのように変更しますか?」と伝えます。依頼された変更を行います(ここではカットリストの編集。ルックの変更は /reels-engine:reel-style を使用)。メンバーが満足したら、今すぐレンダリングするか、レビューページをもう一度開くかを尋ね、それを実行します。
  • タブが閉じられた場合?再度 REVIEW_URL を伝えます(ヘルパーはまだ待機しており、中断した場所(カット、キャプション画面、またはフック画面)から再開します)。
  • 代わりにチャットでフィードバックが入力された場合?バックグラウンドプロセスを停止し、自分で cut-list.json に適用し、すべてのプロポーザルをメンバーの要求に従って解決します(承認または却下)。キャプションの場所も指定された場合は、カットリストの caption_position を設定します(above、below、low、beside-left)。それ以外の場合は null のままにして、スタイルの場所が使用されます。フックカードも要求された場合は、hook_card を設定します(フォローアップを参照)。
  • すべての note に対応し、カットリストからクリアします(フィードバックログには既に保存されているため、何も失われません)。
  • メンバーがチャットで編集について伝えたことすべて(「ここにスペースがありすぎる」「その単語は決してカットしないで」)もログに記録します:ENGINE note "PROJECT" "<言ったこと>"。

段階12:レンダリングとエクスポート

ENGINE finish "PROJECT"(未解決のものがある場合は拒否されます)。リールの長さの約2〜3倍の時間がかかります。頭の後ろフックルックはさらに1〜2分追加されます。

  • buildWarnings:伝達し、自分のミスなら修正して再実行します。フックの警告(小さなタイプ、1つの部分、頭が覆っている)は、フック画面でのメンバーの情報に基づく選択です。伝達し、「修正」しないでください。
  • ok:false:修正可能なものを修正して再実行します。最大2回までとし、それでも問題が解決しない場合は報告します。
  • キャプションが低い位置にあるという警告:一度だけ、1行で言及します(「キャプションの位置が低いです。長い投稿キャプションが一部のスマートフォンでキャプションを覆う可能性があります。」)。メンバーから依頼がない限り、再レンダリングはしません。
  • buildWarnings の行が Hook card left off: で始まる場合:フックなしでリールがレンダリングされたことを意味します。理由を1行で説明し、別のルックを提案します。自分でフックカードを差し替えないでください。
  • buildWarnings の行が Your head covers part of line で始まる場合:注意喚起であり、問題ではありません。一度だけ言及します。
  • レンダリングに失敗した場合:一度再試行し、その後、平易な英語で理由とログパスを伝えます。 3〜4フレームを抽出します(ffmpeg -ss <t> -i "PROJECT/final.mp4" -frames:v 1 <png>)。フックと2つのキャプションの位置で抽出します。リールにフックがある場合は1.5秒の位置でも抽出します。確認内容:選択した場所にキャプションがあり、顔の上にないこと、切り取られていないこと、フォントが読み込まれていること、フックがフレーム内にありクリップされていないこと、2つの頭の後ろルックでは人物が...

…(翻訳のために切り詰められました)

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

関連スキル