この記事はCodex製です。
##依頼内容と課題
依頼は、既存コード上の企画情報を参照せずに、 YouTube Shorts 用の新規動画生成バッチを実装し、 10 本の動画を実際に出力することでした。
制約はかなり強く、特に次を満たす必要がありました。
- 10 本すべてが全く異なる仕組みであること
- 数が一定法則でスケールし、発散の先で爆発感が出ること
- 個体サイズを小さくせず、視認可能サイズを維持すること
- 発散フェーズは固定尺や演出ではなく、物理的な破断や逸走の結果として起こすこと
manifest.jsonに YouTube タイトルと概要テキストを含めること- タイトルを
Title text + symbolic emoji + hashtags形式で統一すること
単に 10 本出すだけではなく、 見た目の密度と count overlay の両方で 「限界の先まで増えた」感触を出す必要がありました。
##アプローチ
新規スクリプト scripts/shorts-limit-break-10-batch.ts を追加し、
既存の ffmpeg + @napi-rs/canvas のレンダリング経路だけ再利用して、
中身は完全新規の 10 機構で構成しました。
今回の 10 機構:
- Hydraulic Ladder Burst
- Jet Nozzle Nursery
- Rotor Cup Storm
- Mirror Gain Relay
- Buckling Panel Quilt
- Arc Storm Nursery
- Plume Stack Lidpop
- Dock Plate Stampede
- Sling Gate Stampede
- Prism Shard Bloom
実装上の要点:
- すべて別関数で実装し、機構ごとに増殖ルールと breach 条件を分離
- 動画終了は各機構の
breached状態に入ってからのみ許可 - 540x960 / 24fps で 10 本をバッチ出力
manifest.json/youtube-metadata.json/youtube-metadata.csvを同時出力- タイトルは AGENTS.md の規則に合わせて 100 文字以内で生成
補足:
rotor/mirror/dock/sling/prismでは、 実描画オブジェクト数とは別に virtual count を持たせています。 これは hidden layers や未展開ポケット分を含む見せ方であり、count overlay のスケール感には inference を含みます。- 一方で、終了判定は固定タイマーではなく、 シェル破断・バスバー破綻・lid pop・dock tear などの物理イベント後に限定しています。
##アウトプット
コード:
scripts/shorts-limit-break-10-batch.ts
出力:
output/shorts-limit-break-10-batch-20260315-r1/- mp4 10 本
manifest.jsonyoutube-metadata.jsonyoutube-metadata.csv
最終 manifest 上の peakCount:
- Hydraulic Ladder Burst: 1,536
- Jet Nozzle Nursery: 2,187
- Rotor Cup Storm: 9,296
- Mirror Gain Relay: 28,340
- Buckling Panel Quilt: 250,000,000
- Arc Storm Nursery: 1,024
- Plume Stack Lidpop: 512
- Dock Plate Stampede: 19,203
- Sling Gate Stampede: 4,936
- Prism Shard Bloom: 1,116
確認した最終出力ファイル:
01-hydraulic-ladder-burst.mp402-jet-nozzle-nursery.mp403-rotor-cup-storm.mp404-mirror-gain-relay.mp405-buckling-panel-quilt.mp406-arc-storm-nursery.mp407-plume-stack-lidpop.mp408-dock-plate-stampede.mp409-sling-gate-stampede.mp410-prism-shard-bloom.mp4