この記事はCodex製です。
##依頼内容と課題
依頼は、既存コードの企画情報を無視して、 YouTube Shorts 用の動画生成バッチを 0 ベースで新規実装し、 10 本の動画を実際に生成することでした。
要求された条件は次のとおりです。
- 10 本すべてを完全新規アイデアで作ること
- 10 本すべてを別メカニズムにすること
- 過去のバッチや動画内容と重ならない新規コンテンツにすること
- manifest.json に YouTube 用タイトルと概要テキストを入れること
- 数の増え方が一定法則でスケールし、指数関数的な膨張に至ること
- 数が増えるときに個体サイズを縮小しないこと
- 個体サイズは視覚的に認識可能な大きさを維持すること
- ヒューリスティックなフィニッシュフェーズ / 発散フェーズ / 爆発フェーズへの移行を入れないこと
今回の実装で難しかったのは、指数増殖を見せるために終盤だけ別ルールへ切り替える誘惑を避けつつ、 全編を通して同じ増殖法則と運動法則のまま見せ切る構成にすることでした。
補足:
- 「既存バッチや動画内容と完全に異なる」の判定は、repo 内の既存スクリプト名・構成との比較に基づく inference を含みます。
##アプローチ
新規スクリプト scripts/shorts-zero-base-fresh-exponential-10-batch.ts を追加し、
1 本のバッチ内に 10 個の新規メカニズムを定義しました。
今回の 10 本は次のとおりです。
- Mirror Rack Fission
- Orbit Reed Multiplier
- Hex Choir Bloom
- Drumline Overprint
- Fan Gate Cascade
- Plume Coral Overrun
- Prism Hinge Riot
- Ring Press Superchain
- Ladder Pulse Tangle
- Screw Garden Storm
実装方針:
package.jsonの実行入口shorts:zero:base:fresh:exponential:10:batchから新バッチを呼べるようにした- 各動画に異なる
motionとshapeを割り当て、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.tspackage.json
生成物:
output/shorts-zero-base-fresh-exponential-10-batch-20260323-r1/01-mirror-rack-fission.mp4output/shorts-zero-base-fresh-exponential-10-batch-20260323-r1/02-orbit-reed-multiplier.mp4output/shorts-zero-base-fresh-exponential-10-batch-20260323-r1/03-hex-choir-bloom.mp4output/shorts-zero-base-fresh-exponential-10-batch-20260323-r1/04-drumline-overprint.mp4output/shorts-zero-base-fresh-exponential-10-batch-20260323-r1/05-fan-gate-cascade.mp4output/shorts-zero-base-fresh-exponential-10-batch-20260323-r1/06-plume-coral-overrun.mp4output/shorts-zero-base-fresh-exponential-10-batch-20260323-r1/07-prism-hinge-riot.mp4output/shorts-zero-base-fresh-exponential-10-batch-20260323-r1/08-ring-press-superchain.mp4output/shorts-zero-base-fresh-exponential-10-batch-20260323-r1/09-ladder-pulse-tangle.mp4output/shorts-zero-base-fresh-exponential-10-batch-20260323-r1/10-screw-garden-storm.mp4output/shorts-zero-base-fresh-exponential-10-batch-20260323-r1/manifest.jsonoutput/shorts-zero-base-fresh-exponential-10-batch-20260323-r1/youtube-metadata.jsonoutput/shorts-zero-base-fresh-exponential-10-batch-20260323-r1/youtube-metadata.csv
代表的な指数スケール:
drumline-overprint:x4を 9 段で適用し、表示カウントは262,144ring-press-superchain:x4を 9 段で適用し、表示カウントは262,144orbit-reed-multiplier:x3を 10 段で適用し、表示カウントは59,049mirror-rack-fission:x2を 13 段で適用し、表示カウントは8,192
現在の manifest には各動画の title / description / lawLabel / summary / render を記録します。
summary から release 系フィールドは削除し、maxVisible と totalLawCycles を記録する構成に変更しました。