0ベース新規実装: Fresh Exponential Shorts Batch 10

この記事はCodex製です。

##依頼内容と課題

依頼は、既存コードの企画情報を無視して、 YouTube Shorts 用の動画生成バッチを 0 ベースで新規実装し、 10 本の動画を実際に生成することでした。

要求された条件は次のとおりです。

  • 10 本すべてを完全新規アイデアで作ること
  • 10 本すべてを別メカニズムにすること
  • 過去のバッチや動画内容と重ならない新規コンテンツにすること
  • manifest.json に YouTube 用タイトルと概要テキストを入れること
  • 数の増え方が一定法則でスケールし、指数関数的な膨張に至ること
  • 数が増えるときに個体サイズを縮小しないこと
  • 個体サイズは視覚的に認識可能な大きさを維持すること
  • ヒューリスティックなフィニッシュフェーズ / 発散フェーズ / 爆発フェーズへの移行を入れないこと

今回の実装で難しかったのは、指数増殖を見せるために終盤だけ別ルールへ切り替える誘惑を避けつつ、 全編を通して同じ増殖法則と運動法則のまま見せ切る構成にすることでした。

補足:

  • 「既存バッチや動画内容と完全に異なる」の判定は、repo 内の既存スクリプト名・構成との比較に基づく inference を含みます。

##アプローチ

新規スクリプト scripts/shorts-zero-base-fresh-exponential-10-batch.ts を追加し、 1 本のバッチ内に 10 個の新規メカニズムを定義しました。

今回の 10 本は次のとおりです。

  1. Mirror Rack Fission
  2. Orbit Reed Multiplier
  3. Hex Choir Bloom
  4. Drumline Overprint
  5. Fan Gate Cascade
  6. Plume Coral Overrun
  7. Prism Hinge Riot
  8. Ring Press Superchain
  9. Ladder Pulse Tangle
  10. Screw Garden Storm

実装方針:

  • package.json の実行入口 shorts:zero:base:fresh:exponential:10:batch から新バッチを呼べるようにした
  • 各動画に異なる motionshape を割り当て、10 本を別メカニズムに分離した
  • 各動画に lawLabel を持たせ、x2 / x3 / x4 の固定増殖則を明示した
  • 個体サイズは baseSize 以上を維持し、世代で増大させた
  • 描画個体数だけ maxVisible で制限し、表示カウント自体は指数則どおりに伸ばした
  • 分裂タイミングを全尺に再配置し、終盤だけ別ルールになる release / burst / finish ロジックを削除した
  • manifest.json / youtube-metadata.json / youtube-metadata.csv にタイトルと説明文を同時出力した

検証:

  • --dry-run で metadata 出力を確認
  • bun run typecheck を実行
  • 実際に 10 本の mp4 をレンダリング

##アウトプット

実装物:

  • scripts/shorts-zero-base-fresh-exponential-10-batch.ts
  • package.json

生成物:

  • output/shorts-zero-base-fresh-exponential-10-batch-20260323-r1/01-mirror-rack-fission.mp4
  • output/shorts-zero-base-fresh-exponential-10-batch-20260323-r1/02-orbit-reed-multiplier.mp4
  • output/shorts-zero-base-fresh-exponential-10-batch-20260323-r1/03-hex-choir-bloom.mp4
  • output/shorts-zero-base-fresh-exponential-10-batch-20260323-r1/04-drumline-overprint.mp4
  • output/shorts-zero-base-fresh-exponential-10-batch-20260323-r1/05-fan-gate-cascade.mp4
  • output/shorts-zero-base-fresh-exponential-10-batch-20260323-r1/06-plume-coral-overrun.mp4
  • output/shorts-zero-base-fresh-exponential-10-batch-20260323-r1/07-prism-hinge-riot.mp4
  • output/shorts-zero-base-fresh-exponential-10-batch-20260323-r1/08-ring-press-superchain.mp4
  • output/shorts-zero-base-fresh-exponential-10-batch-20260323-r1/09-ladder-pulse-tangle.mp4
  • output/shorts-zero-base-fresh-exponential-10-batch-20260323-r1/10-screw-garden-storm.mp4
  • output/shorts-zero-base-fresh-exponential-10-batch-20260323-r1/manifest.json
  • output/shorts-zero-base-fresh-exponential-10-batch-20260323-r1/youtube-metadata.json
  • output/shorts-zero-base-fresh-exponential-10-batch-20260323-r1/youtube-metadata.csv

代表的な指数スケール:

  • drumline-overprint: x4 を 9 段で適用し、表示カウントは 262,144
  • ring-press-superchain: x4 を 9 段で適用し、表示カウントは 262,144
  • orbit-reed-multiplier: x3 を 10 段で適用し、表示カウントは 59,049
  • mirror-rack-fission: x2 を 13 段で適用し、表示カウントは 8,192

現在の manifest には各動画の title / description / lawLabel / summary / render を記録します。 summary から release 系フィールドは削除し、maxVisibletotalLawCycles を記録する構成に変更しました。

##参照した一次情報・一次ソース