Communitygithub.com

alifmahmudashik/shorts-studio-skill

Make a ~55-70 s vertical cartoon story short in the

shorts-studio-skill とは?

This skill enables the creation of engaging 55-70 second vertical cartoon story shorts in a distinctive '2D characters in a colorful 3D world' style, using three.js within the Remotion framework. It's ideal for developers and AI agent users who want to produce viral fact or animated story shorts, building on a proven example about a historic bridge collapse. v2 introduces word-by-word captions, a six-beat viral story formula, strict framing and safe-area rules, per-place lighting presets (interior, night, sunrise), and a constantly moving camera with named moves to avoid repetition. The pipeline covers everything from topic research and script writing (with comedy engine), to voice recording, shot planning, 3D world and character construction, post-processing (ink, lens blur, bloom, grading), sound design, quality assurance via stills and automated checks, and final delivery. The skill emphasizes original content, extensive self-contained assets, and rigorous verification with Opus max, making it a comprehensive solution for high-quality animated shorts.

対応✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/alifmahmudashik/shorts-studio-skill/tree/HEAD

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

漫画3Dストーリーショート(three.js + Remotion)

実証済み例: 歌に落ちた橋。1831年のブロートン橋と、74人の兵士が歩調を合わせて行進したことにまつわる、オリジナルの67秒のショート動画です。

  • コード: Remotionプロジェクトの src/videos/bridge/(コンポジション BridgeShort、1080x1920、30 fps)。
  • スクリプト、音声、サウンド: ~/bridge-short/。
  • スタイル調査: references/。

スタイルリファレンスは非公開で調査されたチャンネルです(references/: STYLE_BIBLE.md、reports/*.md、frames/)。

  • これらの動画は非公開の学習用資料です。アップロード、公開、送信は絶対に行わないでください。
  • スクリプト、キャラクター、ショットをコピーしないでください。ストーリー、キャラクター、音声は常に独自のものです。
  • ナレーションや説明文でチャンネル名を決して言わないでください。

適用されるユーザールール:

  • キャプション: ショート動画ではデフォルトでオン。一度に1単語、中央揃え、太字、暗い輪郭、安全領域内、words.json にタイミングを合わせます(「字幕」を参照)。ユーザーがそう言った場合にのみオフにします。他の画面上のラベルはありません。
  • 英語のみ。
  • 音声: 一定のトーン(無表情: ナレーターは決して反応せず、キャラクターが反応します)。
  • ジョークは調査された実際の事実に基づきます。
  • 標準ミックス: 音楽 +3 dB、SFX -6 dB、音声はそのまま。
  • 最終出力は2K縦型:1440x2560、--scale 1.3333。
  • Opus maxがすべてのチェックを検証します。
  • 各ステップの後に保存します。
  • スクリプトが承認されたら「とにかく実行」します。

パイプライン

  1. トピックと事実. 物理的な原因と結果(視覚的にわかりやすいもの)があり、それを説明する簡単な日常的なアナロジーが存在する、驚くべき実話を1つ選びます。
    • 事実とその出典を SCRIPT.md の先頭に記述します。
  2. スクリプト(約3.7語/秒、35-70秒)。事実ベースのショートには以下の「バイラルストーリーフォーマット」と「面白くする」を使用します。ブリッジビートフォーマットは災害ストーリーの代替手段です:
    • フック: 不条理な事実を一文で(「74人の兵士が橋を渡っただけで鉄橋を倒した」)。
    • 設定: 年、場所、誇り。
    • 行動: 3つか4つのビートにわたるエスカレーション。それぞれ少しずつ大きくなります。
    • スナップ: それが壊れる瞬間。
    • 無表情の二行: 「幸運にも... / 不運にも...」。
    • 解説: 日常的なアナロジーを使った1つの物理的概念(ブランコに乗る子供)。
    • 結果: それが生み出したルール。
    • コールバックツイスト: 結末。
    • 視聴者がすでに見ているものを画面上で説明しないでください。
  3. 音声. voice.wav を録音または生成し、その単語タイミング words.json を(単語タイム付きの任意の音声認識を使用して)作成します。
    • それらをプロジェクトフォルダ(例: ~/bridge-short/voice/)に置きます。
    • 単語タイミングを手動で修正します。すべては words.json にタイミングが合わせられ、キャプションもそれから描画されます。
  4. ショット計画 を story.ts で行います: templates/bridge/(最終的なブリッジソース、Remotionプロジェクトの src/videos/bridge/ と同じ)を src/videos/<name>/ にコピーし、src/Root.tsx の BridgeShort の隣に新しいコンポジションを登録し、名前を変更します。
    • SHOTS: id、a/bフレーム、light day/golden、crowd mode、tau ストーリー時間。
    • XFADE: 場所/時間の変更でのクロスフェード。
    • FLASH_AT: フック後の白いフラッシュ。
    • CAMS: ショットごとのキー {f, dur?, cut?, s: f => {pos, look, fov, roll}}。
    • KICKS: インパクトフリップシェイク。
    • DOF/dofAt: ビートごとのレンズブラー。
    • FOREGROUND: 近接フレーミング小道具。
    • すべての視覚的反応は、対応する単語の0〜3フレーム前に発生します。
    • 各文の主題を1つの連続した流れにチェーンします(flow.ts、「連続フロー」を参照)。すべての動きに名前を付け、すべての停止にフレーミングサイズを付けます(「カメラの多様性」と「フレーミング」を参照)。
    • すべての場所に独自のライトプリセットを与えます(「場所ごとの照明」を参照)。
  5. ワールド.
    • lights.ts: LIGHTS に加えて、ライトごとの LOOK 空/川/雲パレット。
    • shade.ts: 2トーンシェーディングと untone()。
    • build.ts: 町、家、Kenney CC0 キットのプロップを再着色、カメラを遮るものの視線カリング付き。
    • paint.ts: HD Canvas2D ペイントテクスチャ、継ぎ目は暗い色合いでペイント。
    • world.ts: スカイシェーダー、フォグ = 地平線の色、川、フレームごとのポージング、ショットごとに固定された太陽、カメラ相対。
  6. キャラクター.
    • toon.ts: Canvas2D Pen 描画API、600x1000 デザインキャンバス、y = 975 のソール、ビーンヘッド、スティックリム、プラム可変幅アウトライン、顔ライブラリ。
    • cast.ts: カメラ対面ビルボード、群衆、エフェクトカード、まばたき、歩行サイクル。すべてのビルボードは NOINK レイヤーに配置されます。
    • cardshade.ts: シーンライトで照らされたカード、エミッシブなし。
  7. ポスト(Bridge.tsx + ink.ts + lensblur.ts + grade.ts)。
    • コンポーザー順序: ink → lens pre → lens main → bloom → NEUTRAL トーンマップ → grade(MSAA 4)。
    • すべてのピクセルパラメータは出力高さ / 1920 でスケーリングされます。
  8. サウンド(~/bridge-short/audio/: timeline.py、sfx_gen.py、sfx.py、music.py、instruments.py、dsp.py、mix.py)。
    • イベントテーブル → 合成SFXに加えて、音声の下にダッキングされたオリジナルスコア。
    • 出力: mix.wav(48 kHz、正確な長さ)、ステム、cues.md。
    • サウンドを作成する前に、映像の時間定数をロックします。後でタイミングを変更する場合は、サウンドを再実行する必要があります。
  9. ルックチェック. node scripts/bridge-stills.mjs out/<name>/x_ 100,400 0.5 を実行します。
    • BRIDGE_ENTRY=src/sandboxes/<n>/index.tsx を設定して、サンドボックスコピーをレンダリングします。
    • python scripts/sbs_sheet.py out.jpg --ours ... --ref ... で参照フレームとの比較画像を作成します。
    • それらをOpus max検証者に送信します:1〜3枚の画像、200ワード以内の判定。
    • すべてのショットに対してフレーミングチェック(templates/bridge/framing.ts)を実行し、ショットごとに1枚の静止画(最初、中間、最後のフレーム)を含む1枚のコンタクトシートを作成します。「品質ゲート」を参照してください。
  10. 最終レンダリング.
    • npx remotion render src/index.ts <Comp> out/<name>/video.mp4 --codec h264 --crf 16 --scale 1.3333
    • -map 0:v:0 -map 1:a:0 でマルチプレクスします(Remotionは無音のオーディオトラックを書き込みます)。
    • QA: python scripts/short_qa.py final.mp4 out/<name>/qa shots.json は、すべてのフレームについて黒、白、フリーズ、ポップフレーム、ラウドネス、シートをチェックします。
    • 見つかった問題を修正し、詳細なOpus監査を実行します。
  11. 納品. 最終MP4ファイルを SendUserFile で送信し、メモリを更新し、メモを書き込みます。

事前飛行(これを最初に行う)

  • templates/bridge/、references/、scripts/ が存在することを確認します(存在しない場合、Remotionプロジェクトの隣に github.com/mromidev/claude-animated-shorts またはそのフォークをクローンします)。存在しない場合は、停止して取得します。テンプレートなしで一般的な three.js ルックを即興で作らないでください。
  • 最初に15秒のテストクリップ(フック + 2〜3ショット、キャプションとサウンド付き)を作成します。静止画をレンダリングし、品質ゲートを実行し、修正してから、完全なストーリーに拡張します。完全なレンダリングに直接進まないでください。

バイラルストーリーフォーマット: 「天才を笑う」(事実ベースのショートに使用)

毎回6つのビート:

  1. 奇妙な行動 文脈なし、1枚の絵で表示(フック、最初の3秒)。
  2. 笑い: 他のキャラクターが主人公を嘲笑う。
  3. 彼らは皆右を見る: 時間が経過し、主人公は間違っているか無害に見える。
  4. 手がかり: 見返りを予感させる1つの詳細。
  5. 見返り: 主人公が正しかったことを証明する出来事(視覚的なクライマックス)。
  6. 科学: メカニズム(内部 / 断面 / マクロビュー)を示し、それを1つの簡単な文で説明する。
  • 事実の羅列ではなく、主人公がいる物語として語ります。1つの画像で見え、人々が笑うような奇妙な慣行を選びます。
  • 最後の行は、簡潔な要約ではなく、議論やコメント(議論の余地のある何か)を開始します。
  • タイトルのパターン: 「なぜXは...」「どのようにXは...」「Xが本当に意味していたもの」。タイトルに見返りのネタバレを含めないでください。
  • ペーシング: 2〜3秒ごとに新しい主題、カットではなくカメラの移動(「連続フロー」を参照)で到達し、ほぼすべての動きやディゾルブに効果音(ウィッシュ、カチッ、群衆の笑い声)があり、音声の下に音楽があります。
  • 豊かな場所、シンプルなキャラクター(丸い頭、棒状の腕): 60秒のショートには12〜16の異なる場所と20以上の小道具を計画し、各場所に独自の照明ムードを与えます。
  • 最初に出典とともに事実を書きます。年と数字は自然に発音され(「えいせんはっぴゃくよんじゅうしち」)、キャプションは数字として表示されます。
  • 例: templates/SCRIPT_viral_example.md。

面白くする(コメディエンジン)

群衆は主人公を笑います。視聴者も笑うべきです。

  • 無表情の声、不条理な絵. ナレーターは決して反応しません。キャラクターが反応します。この2つのギャップがジョークです。
  • 4〜6秒ごとにギャグ、ショートごとに少なくとも3種類を使用します: ラインギャグ(控えめな表現、「幸運にも... / 不運にも...」)、ビジュアルギャグ(リアクション顔、背景の小さな細部、間違ったスケールの小道具)、サウンドギャグ(リアクションに合わせたばかげたSFX)。
  • 3のルール: 2つの通常のビート、その後3つ目がパターンを破ります。
  • ランニングギャグ: 1人の背景キャラクターまたはオブジェクト(鳩、サンドイッチを持った男)が3〜4回登場し、終盤で見返りを得ます。
  • リアクションショット: カメラはパンチワードの3〜6フレーム後に顔(フローストップまたはラックフォーカス、カットではない)に落ち着き、8〜12フレーム保持します。顔ライブラリを使用します。少なくとも1つの「無関心」と1つの「ショック」を含めます。「リアクションと会話ビート」を参照してください。
  • 自信過剰な主人公、尊大な群衆、過度に真面目な役人: キャラクターは些細なことを致命的に真剣に受け止めます。
  • 1つのビート(見返り)だけで物理を誇張する: 押しつぶして伸ばす、砂塵、インパクトキック。
  • コールバックエンディング: 最後の行は、起こったことを使用して最初の行(フック)をねじります。
  • ジョークは実際の事実の範囲内に留めます: 面白い部分は真実の詳細です。実際の被害者やグループを決してパンチしないでください。ターゲットは過信と尊大さです。

字幕(単語ごとのキャプション)

  • ソース: words.json(音声の単語タイミング、手動修正)。任意の音声認識で動作します。templates/bridge/Captions.tsx の normalizeWords() は、{word|text, start|start_time, end|end_time} を秒またはミリ秒で受け入れ、ElevenLabsの「スペーシング」エントリをスキップします。
  • 音声認識テキストがスクリプト(数字、名前、スペル)と異なる場合は、テキストをSCRIPTの単語に置き換え、STTのタイミングを保持します。キャプションはスクリプトのスペル(「1847」)を表示します。音声は「えいせんはっぴゃくよんじゅうしち」と言っていてもです。
  • コンポーネント: templates/bridge/Captions.tsx を src/videos/<name>/ にコピーし、<Captions words={WORDS} /> をコンポジションの最後の子としてレンダリングします。three.js キャンバスの上のDOMオーバーレイとして、ポストプロダクションコンポーザーの外側に配置します(テキストにインク、ブラー、ブルーム、グレーディングは適用しません)。
  • スタイル: 一度に1単語、フレーム高さの約68%(顔の下、安全領域内)で水平方向に中央揃え、太いサンセリフ、白い塗りつぶし、1080幅で9pxの暗い輪郭、ポップインスケール 0.8 → 1.08 → 1 over 6フレーム、背景ボックスなし、最大幅86%。数字、名前、パンチワードはアクセントカラー(highlight)を使用します。ピクセルサイズは出力高さ / 1920 でスケーリングされます。
  • 顔を決して覆わないでください: クローズアップでキャプション位置に顔がある場合は、yPercent={(frame) => ...} を渡して、そのショットのために移動します。
  • キャプションは、その単語が聞こえる1フレーム前に表示されます(lead)。
  • QA: すべてのショットのパンチワードで静止画をレンダリングし、キャプションが安全領域内にあり、顔を覆っていないことを確認します。

関連スキル