/video-edit
未編集クリップを入力として、完成したリールを出力します。ユーザーは編集アプリを開くことはありません。スマートフォン用のコピーを確認し、修正を指示するだけで、毎回約2分で再レンダリングされます。
構築前に読むもの:references/looks.md(3つのルックと正確な値)、references/layout.md(セーフゾーン、配置、後頭部テキストの計算式)、references/gotchas.md(過去に発生した問題とその対策)。アニメーション挿入が必要な場合はreferences/overlays.mdも読んでください。
macOS、Linux、Windowsで動作します。setup.pyは実行のたびにマシンを検出し、以下のすべてのコマンドはその記録に基づきます。そのため、パスやシェルを推測しないでください。ステップ0の直後の「このマシンについて」を参照してください。
ステップ0:初回セットアップ(一度だけ実行)
SKはこのスキルのフォルダ(このSKILL.mdがあるフォルダ)のフルパスです。通常は~/.claude/skills/video-edit、WindowsではC:/Users/<name>/.claude/skills/video-editです。
SK/config.jsonを探します。
存在する場合: 読み込んで(名前、Instagramハンドル、デフォルトルック、フォルダ)、下記ステップ3のセットアップスクリプトを実行します(数秒:更新後に環境をチェックし修復するだけです)。「このマシンについて」を読み、READYと表示されたらステップ1に進みます。
存在しない場合:
- 次のように表示します:「Welcome to /video-edit! Let's get you set up. This takes about 2 minutes and only happens once.」
- 1つのメッセージで以下を質問します:
- あなたの名前(Instagramプロフィール挿入に使用)
- あなたのInstagramハンドル(プロフィール挿入と、オービットエフェクト用にあなたのリールを取得するため)
- デフォルトルック:bold(後頭部に並ぶキネティックワード)、cool girl(暖かみのある黄色のセリフ斜体、あなたのリールが周囲を公転)、またはcool dude(ダークなエディトリアル、トラッキングされた大文字+セリフ)。迷っている場合にはboldを提案します。
- 生クリップの通常の保存場所(デフォルトは
~/Downloads)と、プロジェクトの保存場所(デフォルトは~/reel-edits)
- マシンにインストールされているPythonを使用してセットアップスクリプトを実行します。STATUS行が表示されるまで、以下の順序で試します:
python3 "SK/scripts/setup.py"、次にpython "SK/scripts/setup.py"、次にpy -3 "SK/scripts/setup.py"。 (Windowsではpython3がMicrosoft Storeのスタブで「Pythonが見つかりません」と表示されることが多いので、次のものを試してください。) どれも動作しない場合:Pythonが不足しています。システムに適した修正方法を表示して停止します(Windows:winget install --id Python.Python.3.12 -e、Mac:brew install python、Linux:sudo apt install python3 python3-venv)。 その後、STATUS行を読みます:- ffmpeg / node / python venv MISSING:行の末尾にこのマシンに適した正確な修正方法が表示されます(Windowsはwinget、Macはbrew、Linuxはapt)。ユーザーに表示して停止し、スクリプトがREADYを表示するまで待ちます。
- Windows:ユーザーはwingetの行を自分でPowerShellウィンドウに貼り付け(wingetは初回に利用規約への同意を求めます)、Claude Codeを完全に終了してから再起動します。新しいプログラムが見つからなくなるためです。
- スクリプトは6つの効果音を自分でダウンロードします。それでもMISSING(オフライン)と報告された場合、それはオプションです:リールには効果音が追加されるまで無音になります。
- オプション、Apify(リールとプロフィール統計を自動取得):簡単なApify MCP呼び出しを試します。接続されていない場合、オプションであり、追加方法を説明します:
- https://apify.com で無料アカウントを作成し、設定 > API & Integrations からAPIトークンをコピーします。
- ターミナルで、YOUR_TOKENの代わりにトークンを入れた次の1行を貼り付けます:
claude mcp add apify -e APIFY_TOKEN=YOUR_TOKEN -- npx -y @apify/actors-mcp-server(注意:Claude Codeはトークンを~/.claude.jsonに平文で保存します。このファイルは非公開にしてください。) - Claudeを再起動し、/video-editを再度実行します。 Apifyがない場合、スキルはユーザーにリールファイルをプロジェクトにドロップするよう求めます。
SK/config.jsonを保存します(機密情報は含めない):{"name": "...", "instagram": "@なしのハンドル", "defaultLook": "bold", "clipsDir": "~/Downloads", "projectsDir": "~/reel-edits", "setupComplete": true, "setupDate": "YYYY-MM-DD"}- 次のように表示します:「Setup complete! Running /video-edit now...」そして続行します。
このマシンについて(毎回実行時に読む)
setup.pyによって書き込まれるSK/.platform.jsonを読みます。OS(os:macos、linux、またはwindows)、CPU、およびこのコンピュータ用の正確なコマンドが記録されています。
PY=pythonの値:スキル専用のPython(MacとLinuxでは.venv/bin/python、Windowsでは.venv/Scripts/python.exe)。このスキルのすべてのPythonスクリプトはこれで実行し、決して素のpython3は使用しません。HF=PY "SK/scripts/hf.py":どのOSでも適切なNodeでピン留めされたHyperFrames(npx --yes [email protected] ...)を起動します。nvm useやnpx.cmdの問題はありません。cutout:CoreML(Apple Silicon)またはCPU(Windows、Linux、Intel Mac:GPUの支援がないため、切り抜きステップが遅くなります。その旨を伝え、バックグラウンドで実行し、編集を続けます)。
setup.pyは実行のたびに(ステップ0)このファイルを書き換えるため、常に最新です。ファイルがない、またはPYが存在しない場合:セットアップが実行されていないか、READYに達していません。ステップ0.3のように実行し、修正方法に従います。
zsh、bash、Git Bash、PowerShellで動作するコマンドスタイル:
- フルパスをダブルクォーテーションで囲み、スラッシュを使用します(Windowsでも問題ありません):
"PY" "SK/scripts/ingest.py" "<project>"。 - PowerShell(Git for WindowsがないWindows、またはPowerShellツールを使用している場合)では、先頭に
&を付けます:& "PY" "SK/scripts/ingest.py" "<project>"。 - 1回の呼び出しで1つのコマンド。
&&、VAR=1 command、引数内の~、source、zshは使用しません。 ffmpegとffprobeはすべてのOSでPATHにあります(setupが確認します)。そのため、単発のffmpegコマンドはどこでも同じです。
厳格なルール
- すべてをリールのセーフゾーン内に収める:上部220、下部450(y 1470より下には何も配置しない)、側面35、右側はy 1155から100。
- テキストやカードで顔を覆わない。後頭部の文字は各文字の少なくとも約70%が見えるようにする。
- キャプションは実際に話された内容を表示する:Whisperが誤認識した名前やキーワードを修正する("Claude"はしばしば"cloud"や"claws"に、"skill"は"scale"になります)。画面上のテキストにダッシュ(em dash)は使用しない。
- 効果音は控えめに(テンプレートの基本音量の
SFX_GAIN = 0.75)、声より大きくしない。 - 他のクリエイターのリールを使用する場合は、画面上でクレジットを表示する(@ハンドル)。自分のプロフィールには実際の数値を表示する。それ以外(コメント、チャット履歴)は汎用的なプレースホルダーとし、実際の人物は使用せず、偽の証拠も作成しない。
- カットは最終レンダリングから証明し、スナップショットからは証明しない。
- ユーザーのファイルを決して削除しない。オリジナルファイルは読み取りのみで、変更しない。
ワークフロー
1. 取り込み
- クリップ:ユーザーが指定したファイル、それ以外の場合は
clipsDir内の最も新しい動画ファイル。<projectsDir>/<short-slug>/を作成する。 (config.jsonの~はユーザーのホームフォルダ、WindowsではC:/Users/<name>です。スキルのスクリプトが展開します。) - スタイルの参照リンク(IGリール、Pinterestピン):ダウンロードしてフレームを確認してからデザインする(取得方法はoverlays.mdを参照)。
2. インジェスト
PY SK/scripts/ingest.py <project> <clips or folder> [--newest 5]
work/sheets.jpg(セットアップとアングル)を確認し、transcript.txt(クリップごとの行、タイムスタンプ付きの単語、スピーチマップ)を読む。
3. テイク選択 -> <project>/edl.json
- テイクからスクリプトを再構築する:人々はセリフが決まるまで繰り返す。ユーザーが特に指定しない限り(「0:47から始まる部分が良い」はそこからの連続テイクを意味する)、最後に完全でクリーンなテイクを使用する。
- イン/アウトポイントはスピーチマップから:最初の単語の約0.05〜0.07秒前から開始し、最後の単語後の無音の開始時点で終了する。セクション間の無駄な無音を削除する。カット前後の短いポーズは、silencedetectで確認してからトリミングする(Whisperはカット箇所で先頭の単語を捏造することがある)。
- 同じアングルのセグメントが2つ連続する場合:片方をズームインする(4Kオリジナルからズーム1.3〜1.9、中心は胸の位置)。
- 不明な単語(キーワード、CTAトリガー):そのスニペットをmedium.enモデルと、その名前を含むプロンプトで再文字起こしする。
- フォーマット:
[{"id": "hook", "clip": "c1", "in": 12.66, "out": 15.72, "zoom": 1.0, "cx": 0.5, "cy": 0.5, "line": "..."}] - EDLをユーザーに短いテーブル(行、クリップ、セクションごとのルック)として投稿し、待たずに続行する。
4. アセンブル、文字起こし、切り抜き
PY SK/scripts/assemble.py <project> # aroll.mp4 クリーン 30fps CFR + segments.json(正確なフレーム情報)
PY SK/scripts/transcribe_cut.py <project> "<スクリプト内の名前とキーワード>"
PY SK/scripts/cutout.py <project> # バックグラウンドで実行;切り抜きフレーム == arollフレームであることを確認
PY SK/scripts/headpos.py <project> # 切り抜き後:セグメントごとの頭部/身体の位置
切り抜きは一度に1つずつ実行(約1.5 GBのRAM)。30秒ごとに進捗行を出力する。
5. インサートを並行して(EDLが確定次第)
スクリプトで要求されるアニメーションインサート(画面上のアプリ、CTAのプロフィールフォロー、ファイルスクロール)ごとに、references/overlays.mdのブリーフテンプレートを使ってバックグラウンドでサブエージェントを起動する:固定サイズ、固定長、ビートは単語のタイミングにロック、透明なwebmで出力。メインの編集をそのまま続ける。
6. ビルド
SK/assets/template/をプロジェクトにコピー(build.py、hyperframes.json、package.json、assets/fonts、assets/sfx)し、build.pyを適応させる。これは実際のリールの完成したビルドです:仕組みはそのままに、コンテンツを書き換える(docstringにどの部分が何かがリストされています)。
- 各ルックの適用場所:リール全体は
defaultLook;ルックを指定する行がある場合、そのセクションが切り替わる。 - オービットとプロフィールグリッドはユーザー自身のリールを使用する(overlays.md:ユーザーハンドルを使用したApify投稿スクレイパー、または
assets/reels/にドロップされたファイル)。 - プロジェクトフォルダからイテレーションする:
HF lint(エラー0)、次にPY build.py --safe、次にHF snapshot --at <10-20の瞬間> --no-end --describe false。コンタクトシートを読み、レイアウト、可読性、セーフゾーンを修正する。(HFは適切なNodeを自動的に選択するため、nvm useは不要です。) 古いバージョンのこのスキルからコピーされたbuild.pyは--safeを無視します:スナップショットに赤いガイドがない場合、そのプロジェクトは古い方法でビルドします。SAFE=1 "PY" build.py(そのようなプロジェクトはMacとLinuxにのみ存在します)。
7. レンダリングとQA
PY build.py # --safe なし
HF render -o renders/<slug>-vN.mp4 --quality high # Apple Siliconで25秒リールの場合約1.5〜2分
PY SK/scripts/check_cuts.py <project> renders/<slug>-vN.mp4 --phone
work/cut_check.jpgを確認:すべてのカット後のフレームで新しいショットがきれいに表示されていることを確認。オーディオのピーク(volumedetect、最大約-2〜-5 dB)とセクション結合部の無音をチェックする。
8. 納品
スマートフォン用コピー(720p)とフル品質レンダリングを送信または指示する。何が変更されたか、ユーザーの判断が必要な点を平易な言葉で報告する。すべてのバージョンをrenders/に保持する。再アセンブル前にassets/ + segments.jsonをwork/vN/にバックアップする。
実際のフィードバックから生まれたデフォルト(再議論しない)
- ルックを作成するためにグレーディングとキャプションを変更する。背景をAI生成の部屋に置き換えない。
- フィルムグレインは使用しない。暗めでも良いが、被写体に光が当たり、肌が赤くならないようにする。
- 先頭のキャプションは話者の前で中央揃えにすると、左端に固定された行よりも読みやすい。
- 後頭部のテキストは特徴的な動きだが、読みやすい場合にのみ使用する。
Built by @tenfoldmarc. Follow for daily AI automation builds, real systems, not theory.