papercut-build について
Papercutライブラリを使い、Remotionのエピソードを一からプロジェクトを作らずに構築するスキルです。足場作りとシーン設計から、素材、音声、レンダリング、制作後のライブラリ更新までを段階的に案内します。
主な機能
- 01ライブラリからエピソードを構成
- 02シーン、ナレーション、タイミングの計画
- 03再利用可能なキット部品でシーンを構築
- 04効果音キューと音声レンダリングの準備
- 05エピソードのプレビューとレンダリング
- 06再利用可能な成果をライブラリに反映
活用シーン
- 01ストーリーボードからRemotionエピソードを制作
- 02複数エージェントによるシーン構築の調整
- 03個別シーンのレンダリングと修正
- 04制作後の再利用素材の登録
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ 0xs4n4tg/ papercut-explainer --skill papercut-buildインストール後、Claude Code で/papercut-buildを入力して読み込まれたか確認します。
詳細
Papercut のビルド
Remotion プロジェクトをゼロから作成するのではなく、ライブラリを使って各エピソードをビルドします。library/README.md を一度読んでください。
事前確認
- インストール:Standard または Full が必要です。ライブラリ、node 20 以降、npm、ffmpeg、Python ツール(numpy、Pillow、soundfile)、音声レンダリング用の Chrome または Chromium が必要です。
papercut-explainerにあるコマンドで確認してください。不足しているものがある場合は、./install.sh --doctorを実行し、papercut-setupに引き継いでください。 - ライブラリ:
$PAPERCUT_LIB、それがなければ~/.config/papercut-explainer/config.env内のPAPERCUT_LIB=の行、それもなければ一度だけ確認してください。ライブラリがまったくない場合は、../papercut-explainer/references/remotion-recipes.mdのスケッチをもとにビルドしてください。 - Remotion のベストプラクティススキル(Remotion プラグインの
remotion-best-practices、またはnpx skills add remotion-dev/skills -g -y -a <your harness id>。install.sh --mode standardでもインストールされます)を最初に読み込み、マークアップ、字幕、Studio に関するルーティングに従ってください。 - 先行ステージで作成した
papercut/STORYBOARD.mdとnarration/script.jsonが必要です。 - ツールチェーン全体のスモークテスト:
library/tools/selftest.shは、一時フォルダーにexamples/hello-reel/をビルドし、静止画を 1 枚レンダリングします。
1. スキャフォールド
$PAPERCUT_LIB/new_episode.sh <series-dir> NN-slug CompId [out-name]
<series>/episodes/NN-slug/{research,narration/voice,papercut} にテンプレートプロジェクトと、キットを同期したコピーを src/lib/ に作成します。node_modules は $DONOR、それがなければ最新の兄弟エピソードから取得し、それもなければ npm i でインストールします。<series>/papercut-assets/ が存在する場合は、デフォルトのテクスチャと小道具に重ねて適用します。
先行ステージで research/、narration/script.json、papercut/STORYBOARD.md が作成されているため、フォルダーはすでに存在する場合があります。スクリプトは既存ファイルにマージし、ファイルを上書きすることはありません。papercut/package.json が存在する場合(すでにスキャフォールド済みの場合)にのみ停止します。
プロジェクト内の src/lib/ は決して編集しないでください。これはスナップショットなので、ライブラリが変更された後も古いエピソードは同じようにレンダリングされます。ライブラリを修正してから、papercut/sync_kit.sh で再同期してください。
2. 計画:episode.json、音声、タイミング
ストーリーボードをもとに、papercut/episode.json を記入します。
scenes:[["S01Hook", "l1_hook", 0], ["S02Name", "l2_name", "called"], ...](シーン ID、ナレーション行 ID、インデックスとしての最初の単語、または完全一致する単語)。banners:{"S01Hook": "TAKEAWAY IN CAPS"}。hookについてはpapercut-hookを参照してください。cutsは Camera / Cut テーブルのカット列です。bed、whipScene、cutSfx、gaps(行の後に追加する間、秒単位)も設定します。
次に、タイミングのステップまで papercut-voice を実行します(最後に build_vo.py と timing_md.py が実行されます)。その後、papercut/ から次を実行します。
python3 $PAPERCUT_LIB/papercut/stubs.py # src/scenes/index.ts + a stub per scene
build_vo.py は 1.2 秒未満のシーンにフラグを立てます。その場合は隣のシーンと結合してください。timing_md.py は STORYBOARD.md の Timing セクションに絶対フレーム数と単語キューを書き込み、エージェントが plan.json を開かなくても済むようにします。
3. アセット
../papercut-explainer/references/asset-prompts.md に従ってください。背景と複雑な静的な小道具には画像ツール(透明 PNG を出力できるものなら何でも)、キャラクター、すべてのテキスト、タグ、ゲージ、ボタン、UI にはコードを使います。生成画像にテキストを含めないでください。画像ツールがない場合は、ペーパーフィルターを使ってすべての小道具をコードで作成してください。スタイルは十分に保てます。背景にはライブラリの <Backdrop> セット(library/papercut/public/bg/backdrops/_sheet.jpg)を使ってください。ライブラリにない場所が必要なエピソードに限り、新しい背景を生成してください。証拠スクリーンショットは node $PAPERCUT_LIB/tools/capture.mjs <url> public/proof/x.png で作成し、キットの RealShot で表示します。
4. シーン
- まず、HOOK ブロックをもとに
S01Hookを自分で作成します。これはエージェントが合わせる基準シーンです(キュー定数、カメラ、クランプされたinterpolate)。 - 残りはシーンごとにまとめて、シーンエージェントに並行して任せます(各エージェントに 2〜3 シーン。エージェントを増やすほど、起動時に必要なコンテキストも増えます)。ハーネス用に
install.shが配置したpapercut-sceneエージェントを使用してください(Claude Code~/.claude/agents、OpenCode~/.config/opencode/agents、Codex~/.codex/agents、Gemini CLI~/.gemini/agents)。汎用エージェントでも構いません。ハーネス独自の方法で起動します(Claude Code の Task ツール、opencode のサブエージェントツール、Codex のサブエージェント、Gemini のエージェントツール)。ハーネスにサブエージェントがない場合は、同じ順序と同じブリーフに従って、シーンを 1 つずつ自分で作成してください。時間はかかりますが、作業内容は変わりません。ブリーフはlibrary/papercut/AGENT_BRIEF.mdです。起動メッセージには、プロジェクトのパス、各エージェントが担当するシーンと絶対フレーム範囲、QA フォルダー名、$PAPERCUT_LIBの値を指定します。 - ファイルの担当範囲:エージェントが書き込めるのは
src/scenes/<Scene>.tsx、任意の<Scene>.parts.tsx、およびtools/cue_sheet.d/<Scene>.jsonのみです。src/lib/**、他のシーン、index.ts、plan.json、episode.json、ストーリーボードには決して手を加えないでください。 - エージェントにはキットのソースではなく、
library/papercut/CATALOG.mdとlibrary/audio/CATALOG.mdを読ませ、何か新しく描く前にコンポーネント、プロップセット、シーンテンプレート(kit/scenes/。たとえば CTA にはCtaPhoneDM)を再利用させます。
ビルドルール:1080x1920、30 fps、シーンはキットのトランジション系列に沿って連結します。グローバルレイヤー:VO と音楽には <Audio>、テープで貼ったバナーには <Boil>、<WordTagCaptions>、<GrainOverlay> を使用します。すべての小道具は <Paper> でラップし、登場には <PopIn> を使用します。各シーンはストーリーボードのカメラ内で動作させます。CSS アニメーションは使用しません。下部 20% は空けておきます。隣接するシーンで背景を共有してはいけません。デフォルトの主役は、オレンジ色で箱型の生き物です(トークン C.hero #D67354、シェード C.heroLo #A9553B、エイリアス you)。アクセサリーや名前ピルで登場人物を区別します。
5. サウンド
library/audio/sfx/*.js から名前で効果音を選び、library/audio/beds/*.json からプリセットでベッドを選びます。papercut/ から実行します:
python3 $PAPERCUT_LIB/tools/cues.py && node $PAPERCUT_LIB/audio/render.mjs
cues.py はエージェントの行を tools/cues.json にまとめ、2.5 秒あたり 1 回を超えるエアサウンドがある場合はメモを出力します。render.mjs は public/audio/music.wav と fx.wav を書き出します。
6. レンダリング
Studio でプレビューします(npx remotion studio)。指示された場合にのみレンダリングします:
$PAPERCUT_LIB/tools/render.sh # -> out/<out>.mp4
フラグ:--workers N(デフォルト 3)、--conc N、--force、--keep。各シーンはキャッシュされるため、修正後は変更したシーンだけが再レンダリングされます。キット、プラン、音声、または字幕を変更すると、すべてが再レンダリングされます。初回実行時には Remotion のヘッドレス Chrome がダウンロードされ、out/cache は数 GB の ProRes を使用します。
1 つのシーンを修正または再構築するには、src/scenes/<Scene>.tsx を編集し、papercut-qa で確認してから、再度 render.sh を実行します。
7. 収穫(エピソード終了後)
python3 $PAPERCUT_LIB/tools/harvest.py . # from papercut/; read-only report
python3 $PAPERCUT_LIB/tools/catalog.py # regenerate both catalogs
library/HARVEST.md の説明に従って、キットの修正、再利用可能なコンポーネント、新しい効果音、繰り返し使える演出を昇格させ、library/CHANGELOG.md に項目を追加します。
- 動きがぎこちない、またはぼやけて見える場合は、
../papercut-explainer/references/motion-principles.mdで該当する原則とキットのヘルパーを確認します。
引き継ぎ
次は papercut-qa です。プロジェクトと STORYBOARD.md から静止画を読み込みます。制作中はシーンごとに実行し、最終レンダリングの前にリール全体でも一度実行してください。投稿後は papercut-strategy が事後分析を行います。