reel は何をしますか?
ファイルの場所と初回セットアップ
- パイプラインフォルダ = このスキルが存在する
video-pipelineフォルダ(このファイルの3階層上:video-pipeline/.claude/skills/reel/SKILL.md)。すべてのコマンドはそこから実行すること。 プロジェクトはその中にprojects/<date>-<slug>/として作成されます。 - PY = パイプライン専用のPython。以下のすべてのコマンドで、システムのPythonではなくこれを使用すること:
Windows では
.venv/Scripts/python.exe、Mac または Linux では.venv/bin/python。 - PYがまだ存在しない場合は、ユーザーに何も入力させずに最初にセットアップすること:
python install.py(Windowsではpy install.py、Macではpython3 install.py)を実行します。 「ffmpeg is missing」または「git is missing」で停止した場合は、そのツールをユーザーのためにインストールし(Windows:winget install ffmpeg/winget install Git.Git; Mac:brew install ffmpeg)、新しいコマンドが見つからない場合はClaude Codeを再起動するよう伝え、その後インストールを再実行します。 インストールがREADYを表示したら、PY scripts/selftest.pyを実行し、9/9 passedを確認します。
STYLE (参考ごとに1回) -> 1 BRIEF -> [ゲート: ユーザーがスクリプトを承認] -> 2 SHOOT (ユーザー)
-> 3 ALIGN -> 4 CUT -> 5 EFFECTS -> 6 PREVIEW -> [ゲート: ユーザーのフィードバック、ループ] -> 7 FINAL
あなた(AI)が書き、カットし、レンダリングします。ユーザーは撮影し、承認し、投稿します。ここから投稿されることは決してありません。
0. 参考動画からのスタイル適用(ユーザーが参考編集を送ってきた場合)
PY scripts/style_ref.py <ref.mp4> [その他の参考] --name <style-name>styles/refs/<style-name>/に書き出されたすべての画像を開き、report.json の数値を確認します。styles/default.jsonと異なるキーのみを含むstyles/<style-name>.jsonを記述します: キャプションフォント/サイズ/色/位置/グループあたりの単語数/大文字小文字、オンスクリーンテキストの外観、カットのタイトさ(cut.max_gap:高速編集ではよりタイトに)、エフェクト間隔(effects.min_gap、参考動画のペースから)、ラウドネス。styles/<style-name>.mdを記述します:編集内容を平易な言葉で説明。見た動きに一致する51のエフェクトはどれか、画面上で何がどのくらいの頻度で発生するか、フックがどのように始まるか、決して行わないことは何か。測定値(1分あたりのカット数、ショットの長さ)を追加します。- ユーザーに .md を見せて、何が間違っていたか尋ねます。あなたはサンプルフレームを見ていますが、動きや音は見えていません:そのことを伝え、ユーザーが気に入っているタイムスタンプを指定してもらうよう依頼します(
--at 7.2,12でそれらのフレームを取得)。
フォント:キャプションは vendor/claude-video-effects/fonts/ 内の任意のフォント(Montserrat、Anton、
Archivo Black、Inter、Instrument Serif、Playfair Display、Space Mono、Permanent Marker)またはユーザーが fonts/ にドロップした .ttf/.otf を使用できます。
1. ブリーフィング
PY scripts/new_project.py "<slug>" --lang id --style <style>(lang:id、en、またはauto)。~/.claude/youtube/voice.mdまたは~/.claude/instagram/voice.mdが存在する場合は読み込みます。ユーザーの言語と声で記述します。数値、結果、クライアントをでっち上げることは決してせず、尋ねるか{{angka}}のままにします。script.jsonを記述します:ユーザーが話す文ごとに1行、役割はhook/body/cta。- フック:3つのオプションを書き、1つを推奨し、話す時間を約3秒以内に保ちます。
onscreen:フック用の短いテキスト(およびタイトルカードが必要な行)。effects:単語にエフェクトキューを設定:{"fx": "backdrop-word", "on": "GRATIS", "text": "GRATIS"}。 スタイルの .md から選択します。最大でもeffects.min_gap秒ごとに1つのエフェクト。すべての行にエフェクトがつくわけではありません。ユーザー自身のリールを使用するエフェクト(orbit、phone-fan、place-in-grid、fan-build、noise、profile-wall、carousel-spin)には"images": "<folder>"が必要です。- チャートとカウンター(
liquid-glass-graph、over-the-shoulder-zoom)は実際の数値がある場合のみ使用。
brief.mdをその隣に記述します:フックのオプション、ユーザーが読むスクリプト、エフェクトごとの撮影メモ(「行4:頭の上に余白を残してください」)、およびtemplates/shooting.mdの撮影ルール。- ゲート: スクリプトを表示して停止します。ユーザーが承認するまで続行しないでください。
2. 撮影(ユーザー)
ユーザーはファイルを <project>/raw/ に配置します。複数のファイルでも問題ありません。名前順で使用されます。
3. アラインメント
PY scripts/transcribe.py <project>(初回実行でWhisperモデルをダウンロード)。 録音内で多くの再開がある、またはカットが単語を繰り返す場合?代わりにPY scripts/burst_transcribe.py <project>を使用します:音声のバーストごとに個別に文字起こしを行います(large-v3-turbo)。そのため、一時停止後の再開が次のテイクにマージされることはありません。それでも単語がポーズを飲み込む場合は、アライン前にPY scripts/snap_words.py <project>を実行します。PY scripts/align.py <project>。レポートをユーザーに簡潔に読み上げます: MISSING(欠落)または NO COMPLETE TAKE(完全なテイクなし)の行、および残しておく価値がありそうなアドリブ。行が欠落していない限り、そのために停止する必要はありません。プレビューと一緒にそれらについて言及します。
4. カット
PY scripts/cut.py <project>
音声のみのリール(ユーザーが声のみを録音し、映像はすべてモーショングラフィックス):
代わりに PY scripts/cut_voice.py <project> を実行 -> work/voice.wav(クリーン、-16 LUFS)と
work/prog_words.json(カットトラック内の各保持単語とその時刻)。その上でビジュアルを構築します(HyperFramesがあればそれを使用し、なければユーザーのエディタ)。エフェクトのステップでは顔が必要なため、スキップします。
ライセンスフリーのBGM: .venv-music/ が存在する場合(python install.py --music)、
.venv-music/<Scripts|bin>/python scripts/music_bed.py work/bed.wav --seconds 30 --seed 1 --prompt "<mood>, no vocals"
でBGMを作成し、隙間を聞き(不均等な場合は別のシードを試す)、"music": {"file": "<abs path>/work/bed.wav", "db": -22} を設定します。
5. エフェクト
PY scripts/effects.py <project> plan。script.jsonキューを編集して警告を修正します。PY scripts/effects.py <project> check。その後、すべてのwork/check/fx_*.pngを見ます。 テキストが顔の上にある、端で切れている、読みにくい:オプション(x、y、短いtext)を修正し、再度チェックします。PY scripts/effects.py <project> render。これが遅いステップです(すべてのフレームが顔追跡を通ります)。実行中であることをユーザーに伝えます。
6. プレビュー
PY scripts/finish.py <project>->preview/preview_vN.mp4。PY scripts/finish.py <project> --check <t1,t2,...>を各エフェクトの中央と他の2〜3箇所で実行します。PNGを見ます:キャプションがエフェクトと衝突していないか、フックテキストが読めないか、顔の上に何かがないか。表示する前に修正します。- ゲート: ユーザーにプレビューパスと簡単な編集リスト(使用したテイク、カットした箇所、エフェクトとその場所)を渡します。フィードバックを求めます。
フィードバックを変更に反映させる
| フィードバック | 変更 | 再実行開始地点 |
|---|---|---|
| 「行3の別テイクを使って」 | choices.json {"take": {"3": 1}} | アライン |
| 「0:14での発言を残して」 | choices.json {"keep_unmatched": ["u3"]} | アライン |
| 「行5を削除」 | choices.json {"drop_lines": [5]} | アライン |
| 「カットがきつすぎる/緩すぎる」 | スタイル cut.max_gap、cut.post_pad | アライン |
| 「そこにエフェクトは不要」/「単語を大きく」 | script.json の effects | エフェクト計画 |
| キャプションの見た目、オンスクリーンテキスト | スタイル captions / onscreen、またはスクリプト onscreen | 仕上げ |
| 音楽 | script.json "music": {"file": "...", "db": -22} | 仕上げ |
あるステージから再実行すると、それ以降のすべてのステージも再実行されます。アラインまたはカットを再実行すると、エフェクトのレンダリングも(遅いため)再実行されるので、最初にフィードバックをまとめてください。
7. 最終版
PY scripts/finish.py <project> --final->final/final.mp4とfinal/cover.jpg。final/caption.mdを記述します:- 最初の約125文字でフックを伝えます。これはフィードが「さらに表示」の前に表示するすべてです。
- 1つのコールトゥアクション。「コメント KEYWORD」の場合は、動画と一致するものにします。
- 最大5つのハッシュタグ、トピックに特化したもの、末尾に。ユーザーの言語と声で。
- でっち上げの数値は禁止。「ストップスクロール」禁止、ハッシュタグの壁禁止。
- 1行で次のことを思い出させます:トレンドオーディオはInstagram内で追加され、ユーザー自身が投稿します。
ルール
- スタイル .md が基準です。何かを追加するか迷った場合は、追加しないでください。
- 顔を覆わないでください。2倍を超えてズームしないでください。
- 限界について正直に:エディタはテイクとタイミングをうまく選択しますが、話し方を評価することはできません。テイクが平板に聞こえる場合は「行3のエネルギーを確認してください」と言い、聞こえたふりをしないでください。
projects/をgit管理外に保ちます:生のフッテージは大きく、個人情報を含みます。