/storytelling
┌──────────────────────┐
│ [4:12] [cover] [comments] │ 3枚のカードが同時に表示
│ I made this carousel │ 黒枠タイトル、1~2行
│ in a few minutes │
│ and it's doing well │ 小さな白いサブタイトル
│ (顔) │ 連続テイク、少しズームイン
│ entire carousel │ TikTokキャプション
└──────────────────────┘
初回使用
このスキルのフォルダは、Claude Codeがロード時に表示する「ベースディレクトリ」です。
SKILL_DIR="<このスキルのベースディレクトリ>" # Claude Codeが「このスキルのベースディレクトリ」として表示したパス
KIT=$(python3 -c 'import os,sys;print(os.path.realpath(os.path.join(sys.argv[1],"..","..","kit")))' "$SKILL_DIR")
PY="$KIT/.venv/bin/python"; [ -x "$PY" ] || bash "$KIT/setup.sh"
ベンガル語クリップ. 話者がベンガル語で話す場合、最初の words 呼び出しの前に REEL_LANGUAGE=bn を設定(exportするかコマンドの前に付加)して、Whisperが翻訳ではなくベンガル語で書き起こすようにしてください。画面上のすべてのテキスト(タイトル、ラベル、アイテム)もベンガル語で記述し、words が出力する単語に正確にアンカータイムを合わせてください。ベンガル語は同じサイズの英語よりも幅が広くなるため、見出しは2~4語に抑え、コンタクトシートでオーバーフローがないか確認してください。Whisperはベンガル語のスペルミスを起こしがちです(例:「ঢাকার মেয়র」が「ধাকার মেওর」になる)。仕様を書く前に、選択した区間の words 出力を読み、間違ったスペルを <clip>.transcript.json で直接修正し(word のみ変更、start/end はそのまま)、その後 words を再度実行して、キャプションとアンカーが修正された単語を使用するようにしてください。words に長い音声区間が欠落している場合は、トランスクリプトを削除して words を再実行してください。転写ツールがスキップされた区間を再チェックします。クリップが9:16でない場合(たとえば正方形の1080x1080の電話動画)、最初のフレームを確認してください。まっすぐにクロップすると顔が画面いっぱいになり、ビジュアルが隠れる可能性があります。その場合はユーザーに伝え、9:16での録画を提案してください。
文字起こしには GROQ_API_KEY が設定されている必要があります。ffmpeg と Node が必要です。
手順
- クリップ. 任意の9:16トーキングヘッド。
- 文字起こし.
"$PY" "$KIT/reel.py" words <video>を実行します。1行に1文が[ends …](その文の最後の単語が終わる時間)付きで出力されるので、それをendとして使用します。小さなストーリーや証拠を示す、4~8秒の連続した区間を1つ選んでください。つなぎ合わせると、ジャンプカットが不自然に見えるため行わないでください。 - 仕様.
<clip>.storytelling.jsonを記述します(以下参照)。仕様内のパスは仕様ファイルからの相対パスです。3枚のカードは写真で表現するストーリーです。すなわち、労力、対象、結果です。 - ビルド.
"$PY" "$SKILL_DIR/build.py" <spec.json>を実行します。 - 確認.
<out>.sheet.jpgを確認します。- カードとタイトルが上部220pxをクリアしていること。
- キャプションが口を覆っていないこと(
caption_topを移動。デフォルトは1385)。 - タイトルが各行に収まっていること。
- 引き渡し. mp4のパスをユーザーに渡します。
仕様
{
"video": "my-clip.mp4", "start": 42.3, "end": 47.8,
"zoom": 1.3,
"cards": [
{"type": "stat", "label": "TIME SPENT", "value": "4:12", "unit": "minutes"},
{"type": "cover", "image": "my-photo.jpg", "text": "the best *ai tools*\nto use when\nyou're *young and broke*"},
{"type": "comments", "title": "Comments", "rows": [["sarah.creates", "CAROUSEL"], ["mike.builds", "CAROUSEL!!"]]}
],
"title": ["I made this carousel", "in a few minutes"],
"subtitle": "and it's doing extremely well"
}
cards は正確に3つ必要で、それぞれ以下のいずれかです。
image:{"src": "photo.jpg"}、正方形の写真。cover: カルーセルカバー。imageとtext(*単語*は黄色に、\nは改行になります)。ゆっくりとドリフトします。stat:label、value、unit、およびリング。valueが数値("250"、"10,000")または時刻("4:12")の場合、カウントアップします。ring(0~1)はリングの充填度合いです。
comments: 最大4つの[handle, text]行。text:{"big": "3×", "small": "more saves"}。
その他のフィールド:
title: 1行または2行。各行は最大約22文字。subtitle: 1行の短いテキスト。zoom: テイクのズームイン度合い。デフォルトは1.3、1でズームなし。
テイスト
- すべての要素が、最初の3分の1秒以内に同時に表示されます。決して一つずつ表示しないでください。
- タイトルは、一呼吸で語るストーリーです。サブタイトルはその見返りです。
- カードは実際のもの(ユーザー自身の投稿、数字、スクリーンショット)を表示します。コメント行とハンドルは、ユーザーが提供した実際のものでなければなりません。ユーザーが何も提供していない場合は、
textまたはstatカードを使用し、人物をでっち上げないでください。