papercut-storyboard について
papercut-storyboardは、Papercut動画の制作前にシーンを設計するスキルです。シーンごとのカメラワーク、トランジション、フレーム単位のイベント、効果音を指定し、制作時の判断のばらつきを抑えます。
主な機能
- 01シーンごとのカメラワークとカットの計画
- 02構成表をフレーム単位の視覚イベントに展開
- 03字幕帯、背景、シーン要素の指定
- 04トランジションと効果音の計画
- 05証拠提示、コールバック、テンポ規則の確認
活用シーン
- 01脚本を実行可能なシーン設計に変換
- 02シーンごとのカメラワークと開始カットを指定
- 03強調するナレーション語に視覚イベントを割り当て
- 04papercut-buildへの引き継ぎ前に絵コンテを確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ 0xs4n4tg/ papercut-explainer --skill papercut-storyboardインストール後、Claude Code で/papercut-storyboardを入力して読み込まれたか確認します。
詳細
Papercut ストーリーボード
ストーリーボードは、すべてのシーンの土台となる計画です。各シーンのカメラの動きとカットを指定するので、シーンエージェントが独自に考案することはありません。「CameraPush または独自の変形」とだけ書かれた簡単な指示では、どのシーンも単調なプッシュインか手作業のズームになり、キットのカメラワークが活用されません。
事前確認
- インストール:最小構成で十分です。ライブラリがある場合は、各カメラワークのプロパティと適した場面を
library/papercut/CATALOG.mdの「paper/camera.tsx」と「paper/transitions.tsx」の各セクションで確認します。ファイルがない、または古い場合は、python3 $PAPERCUT_LIB/tools/catalog.pyを実行します。$PAPERCUT_LIBは環境変数から取得し、設定されていない場合は~/.config/papercut-explainer/config.envのPAPERCUT_LIB=の行から取得します。それでもわからない場合は、一度だけ尋ねます。 narration/script.jsonと、HOOK ブロックおよびステージング表(各行にバナー、セット、小道具、UI の場面、マスコット、ギャグを記載)を含むpapercut/STORYBOARD.mdが必要です。ない場合は、papercut-hookとpapercut-scriptを実行します。- セット選び用の背景シート:
library/papercut/public/bg/backdrops/_sheet.jpg。この手順で必要なものだけを開きます。
1. 全体ルール
これらを STORYBOARD.md の先頭、HOOK ブロックの下に記載します。役割別のパレット(セットごとに背景色を変えます):../papercut-explainer/references/style-guide.md のセクション 5。フォント:セクション 6。キャンバスとゾーン:セクション 4。ひとつの長い比喩に合う機能解放には、セクション 12 を使えます。
- 1080x1920、30 fps。バナーは高さの 14~21%、キャプション帯は 68~80%(顔に重ならないようシーンごとに位置を調整)、下部 20%は空けておきます。
- 光は左上から当てます。彩度を高めるのは、キャラクター、キャプション、信号だけにします。
2. カメラ/カット表
シーンブロックの前に、シーンごとに 1 行を記載します。各行では、キットの paper/camera.tsx にあるコンポーネントと、そのシーンへのカットに使う paper/transitions.tsx の CutSeries の種類を指定します。
| シーン | カメラ(paper/camera.tsx) | カットイン(CutSeries の種類) |
|---|---|---|
| S01Hook | OrbitCamera + Depth、"" で SnapZoom | なし |
| S04Name | <focal prop> まで上昇する Crane | tearAway |
| S09Peak | <lineup> に沿った CrabTrack | whip |
| S10CTA | <prop> から phone への RackFocus | tapePull |
- カメラの選択肢:
OrbitCamera+Depth、SnapZoom、Crane、CrabTrack、DollyZoom、RackFocus、ForegroundPass、DutchTilt、FocusPulse、FreezeFrame、PullBack、PovMask、TimeRamp、TiltShift、FocusHunt、Handheld、CameraPush(paper/kit.tsxから)。各カメラワークに適した場面については、カタログのpaper/camera.tsxセクションを確認します。 - カットの選択肢:
hard、whip、zoomThrough、pageTurn、tearAway、tapePull、stampCut、infiniteZoom、popUpBook、keyhole、burnAway。 - 通常の
CameraPushを使用できるのは、シーンの最大 3 分の 1 までです。 - 各行のカメラをシーンブロックのヘッダーにコピーします。カット列は
episode.jsonに"cuts": {"S04Name": {"kind": "tearAway"}}として追加します(項目がない場合はハードカットです)。この処理はpapercut-buildが行います。
3. シーンブロック
シーンごとに 1 ブロックを作成し、各シーンを 1.5~5 秒にします。カットは文の切れ目に合わせます。
## S03: <beat> (5.6-8.2 s, 78 f) BANNER: <TAKEAWAY IN CAPS>
Location/bg: <world location + bg colour> Camera: <camera.tsx component + params, from the table> Cut in: <kind>
Cast: <who, accessories> Caption band: y=0.76
| VO word (stressed) | frame | event | motion spec |
| "<word>" | +6 | <prop enters / state flips / acts> | <spring/slide/swap + frames> |
Ambient: <LED blink, idle bob, stars, screen waveform>
Boil: banner + labels, +-1.5 px every 2 frames
SFX: <pop, chime, click...>
- ステージング表の各行を、フレーム単位のイベントに展開します。強調語ごとに 1 つ(0.4~0.8 秒ごと)設定し、環境の動きは常に続けます。フレームは語を基準としたオフセットで、後から
cueOf(ID)(word, n)で読み取ります。 - 製品 UI は、紙のモニターまたはノート PC 上に大まかに再現し、カーソルのクリック、入力、進捗、波形、リストのスクロールなどの偽の操作を加えます。
- 証拠: リールごとに一度、元のページの実際のスクリーンショット(描き直しではなく、
library/tools/capture.mjsによるブラウザーキャプチャ)を紙のカードに貼り、赤いマーカーで重要な行を囲む円を描いていきます。それ以外はすべて、紙切り絵風に大まかに再現します。 - CTA の前に、以前のセットへのコールバックを 1 つ入れます。
4. カメラとトランジションのルール
- 各シーンにカメラの動きを1つ設定します。基本はゆっくりとしたプッシュインです。奥行きを出すには、照明のあるセットでパララックスオービットを加えます。数字やジョークでは強調する言葉にパンチインまたはスナップズームを入れます。前景の横切り(レンズの前をぼかした紙のオブジェクトが通過する動き)やラックフォーカス、スケールを見せるプルバック、苦戦するマスコットの場面でラベルを付けたフリーズフレームも使います。
- バナーが変わる場面では、ほとんどをハードカットにします。トピックの切り替え2〜3回でモーションブラーを伴うウィップパンを使い、画面、ドア、鏡の「内側」に入るときはズームスルーを使います。ページをめくる、または破る動きはリールごとに最大1回にし、気づきを得る場面かビフォー/アフターの対比で使います。CTAへのつなぎにはテープを引く動きを使います(無地のクラフト紙のテープで、任意で
labelを使って単語を印字できます)。 - フックからのカットでは、その動きを引き継ぎます。S01とS02には
papercut-hookのルールを適用します。 - トランジションは6〜12フレームにし、それぞれにSFX(ウィップ、ズーム、ページをめくる音、破る音、テープを剥がす音)を付けます。
- ライブラリプロジェクトでは、キットのトランジションシリーズを使ってシーンを連結します。これにより、すべてのシーンが
plan.jsonのフレームで開始され、音声との同期が保たれます。
5. SFX プラン
- エア音(whoosh、slide、whip、zoom)はまとめて、リール全体で2.5秒あたり最大1回にします。
cues.pyはこれを超えると警告を表示します。目安として、33秒で12回なら問題ありませんが、26秒で24回では多すぎます。 - 登場時には接触音(pop、thud、stamp)または無音を使います。音声をレンダリングする前に、
tools/cues.jsonで回数を確認します。 - 各ブロックの
SFX:行には、library/audio/CATALOG.mdにあるSFX名を記載します。シーンエージェントは実際の行をtools/cue_sheet.d/<Scene>.jsonに書き込みます。 - ベッドのプリセット(
episode.jsonの "bed")を選び、カットの種類に合わせてcutSfxを設定します。tearAwayは破る音、tapePullはテープを剥がす音です。
チェック項目
-
すべてのシーンにカメラの動きとカットインがあり、単純な
CameraPushを使うのは全体の3分の1以下です。 -
強調する言葉すべてにイベントがあり、環境の動きも記載されています。
-
証明する場面が1つ、コールバックが1つあり、CTAへのつなぎにテープを引く動きまたはウィップパンを使っています。
-
ページをめくる、または破る動きは最大1回で、エア音は予算内です。
-
各シーンブロックのイベント表に、期待を持たせる箇所と誇張する箇所を1つずつ記載します。キットのコンポーネントに対応付けた12の原則については、
../papercut-explainer/references/motion-principles.mdを参照してください。
引き継ぎ
次は papercut-build です。プロジェクトのひな形を作成し、カメラ/カット表とシーンの境界を episode.json に変換します。STORYBOARD.md と narration/script.json を読み込みます。STORYBOARD.md の Timing セクションは、音声の完成後に生成されるため、記載しないでください。