Talking-Head Short — マスターエディター
簡潔な返信を書いてください。文字起こしや長いログは出力しないでください。spec.json は Edit ツールで編集し、書き直さないでください。各スクリプトはコンパクトなレポートを出力します。それを読んで行動し、次に進んでください。
S=<このスキルディレクトリ>/scripts、WD=<生ファイルの隣の作業ディレクトリ>/ths_<名前>
0. セットアップ(マシン/サンドボックスごとに1回)
bash $S/setup.sh → 表示された PY= を使用します。これにより、静的ffmpegを含むすべてのPyPIパッケージがインストールされます。
すべてのダウンロードには自動フォールバックがあります。サンドボックス(claude.aiコード実行、無料・有料とも)は通常、HuggingFace、Mixkit、Google Fonts APIをブロックしますが、GitHubは許可します:
- 文字起こしモデル:HuggingFace → GitHubミラー(whisper-base、次にwhisper-tiny)
- 音楽/SFX:Mixkit → GitHubミラーCC0パック(IDは
pack:lofi_chillのようになります) - フォント:Google Fontsリポジトリ → jsDelivr → GitHubミラーOFLパック(32ファミリー) → システムフォント
- Bロール:Mixkit → なし(カードを使用するか、ユーザーにクリップのアップロードを依頼)
セットアップが「ネットワークなし」/ pipエラーを出力した場合:サンドボックスのネットワーク出力がオフになっています。ユーザーに正確に(1メッセージで)伝えてください:
「claude.ai → Settings → Capabilities → Code execution → Network access:All domains(または追加:pypi.org、files.pythonhosted.org、github.com、objects.githubusercontent.com、release-assets.githubusercontent.com、api.github.com、raw.githubusercontent.com、cdn.jsdelivr.net、huggingface.co、mixkit.co、assets.mixkit.co)、その後新しいチャットを開始して /talking-head-short を再度実行してください。」numpy/ffmpegなしで編集を試みないでください。
すべてのソースが失敗した場合のみ:貼り付けられた文字起こしを要求 → $PY $S/align_text.py $WD transcript.txt。アセットは ~/.ths_assets にキャッシュされます。
1. 分析
$PY $S/analyze.py RAW $WD
解像度、アイポイント、クリーンな長さ、自動除去されたフィラー・吃音・再開、CHECK(ソフトフィラー、低信頼度単語、長いポーズ)、および8単語ごとのタイムスタンプ付きTEXTを出力します。
- 不良テイクは自分で判断してください。 誤スタート、未完了の文、「あのー」「えーっと」「みたいな」を削除します。修辞的な繰り返しは維持します。
--remove '[[s,e],...]'(ソース秒)を付けて再実行します。文字起こしはキャッシュされます。 $WD/frames.jpgはアイポイントやフレーミングが疑わしい場合のみ確認します。
2. ブリーフィング(頭の中で、その後ユーザーに4行)
以下を書きます:トピック · コアメッセージ · 感情のアーク(フック → … → ペイオフ) · ニッチ行(NICHESから) · トーン(calm/balanced/energetic) · 生のフレーミング(wide or tight)。
次に $PY $S/style.py RAW "<niche>" --out $WD/style.json を実行します。これにより、適応されたパレット(理由付き)、フォント、MG/Bロール/音楽/SFXの方向性、ハードノートが出力されます。
references/craft.md(ルール)と references/spec.md(スペック形式)を1回読んでください。
3. 構築前に質問(決して先にレンダリングしない)
AskUserQuestionが利用できる場合はそれを使用し、そうでなければ1つのコンパクトな番号付きメッセージを使用します。毎回オプション1を推奨します。
- スタイル: 検出されたニッチ + トーン(例:「自己啓発 · calm-reflective」)対1~2の代替案。
- フォント: その行のペア対2つの代替案(明確なスタイルコントラスト:サンズリード + セリフ/イタリックキー、またはボールドサンズキー + イタリックセリフアクセント)。
- パレット: 映像に適応された行パレット対映像由来パレット対ユーザー指定のブランドカラー。
- ビジュアル密度: Minimal(キャプション + 2~3カード)・Balanced(キャプション + 4~6カード / Bロール)・Rich(より多くのMG + Bロール)。
- 音楽:
$PY $S/assets.py music "<mood>"からライセンス候補3つ(ID · タイトル · タグ)、またはなし。 - Bロール: はい(リテラルな行に一致するライセンスストック) / いいえ。 ユーザーがすでに答えた質問はスキップします。回答を待ちます。
4. アセット収集
- フォント:
$PY $S/assets.py font "Family" ... - 音楽、SFX、ビデオ:
assets.py music|sfx|video "<query>"を実行して一覧表示、その後assets.py get <kind> <id> $WD。- SFX by tone:calm → "air woosh", "chime";balanced → "whoosh", "pop";energetic → "swoosh", "impact"(1回使用)。
- ブロックされたソースは自動的にフォールバックされます(パックID)。
assets.py packでオフラインCC0パック全体を一覧表示します。
5. spec.json、プラン、スタイルフレームの作成
$WD/spec.jsonを作成します(references/spec.md参照):キャプションは話された順序、カードは適切な節に、オーディオ。$PY $S/engine.py $WD --plan→ すべてのISSUEをspecの編集(ビートの短縮や結合、カード下のキャプションの移動や削除)で修正し、ISSUEがなくなるか許容できるものだけになるまで再プランします。$PY $S/engine.py $WD --frames t1,...を10~15のタイムで実行:すべてのカードの中間点と終了−0.3秒、およびすべてのキャプションの終了−0.1秒。$WD/styleframes.jpgを確認し、カットオフ、密集、位置ずれ、パレット外のものを修正します。- スタイルフレームを1行(「レンダリングしてよろしいですか?」)でユーザーに表示します。ユーザーが指摘したもののみ反復します。
6. レンダリング、ミックス、QA
bash $S/render.sh $PY $WDはパーツを並列レンダリングし連結します(ノートPCで動画1分あたり約5分)。コマンドごとに時間制限のあるサンドボックスでは、パーツごとに$PY $S/engine.py $WD --render --part i/Nを実行し、その後--concat Nを実行します。$PY $S/mix.py $WD→final.mp4(音声クリーンアップ、ペイオフ調整されたダッキング音楽、SFX、-14 LUFS)。$PY $S/qa.py $WD→qa_endframes.jpgを確認します。すべてのビートとカードの終了でテキストとアニメーションが完了している必要があります。フラッシュフレームはなしでなければなりません。- ファイルパスと、選択した内容とその理由を3行で提供します。ダウンロードできなかったアセットがあれば言及します。
譲れない条件(理由:それぞれがアマチュアと指摘された)
- キャプションが途切れてはいけません。リードはキー幅以下で近くに配置します。黄金比で2つの対照的なフォントスタイル。単独のフィラーワードにキャプションを付けないでください。
- モーショングラフィックスは意味を示し、シーンチェンジ前に終了し、1つのビジュアルシステムに収まります。棒人間やクリップアートは使用しないでください。
- スムーズ:カットをまたいでイージングされたアイロックズーム、フラッシュフレームなし、多様なトランジション。
- カラーコレクションのみ。ライセンス済みアセットのみ(Mixkit / Google Fonts OFL)、LICENSES.txtを$WDに保存します。