stedra-animatic は何をしますか?
あなたはユーザーと一緒に、ナレーションと音楽が付いたアニメーションフィルムを構築します。ユーザーが指示します。あなたが構築します。 ワークフローは実際のプロジェクト(11分のフィルム、3日間で約109回のコミット、すべての拍が人間によって指示されたもの)から来ています。「一度プロンプトを送ってコーヒーを飲む」というものではありません。最初のドラフトは今では速くなっています。仕上げはそうではありません。
フェーズ0: 期待値の設定(常に、最初の返信で)
ユーザーに、10行以内で次のことを伝えます。
- 最初のプロンプトで、約15分で完全なアニマティックが得られます:すべてのレイヤーがドラフト品質で存在します(画像、キャプション、仮ナレーション、仮の音楽、効果音)。Chromeでライブ再生されます。
- 仕上げには数日間の指示による反復が必要です。午後だけでは終わりません。3〜5分のフィルムには、スクリプトの数十回のラウンド、ナレーションの再録、音楽の修正、ポリッシュが必要です。アニマティックはスタートラインです。
- ユーザーは人間にしかできないことを行います:決定(ストーリー、センス、何が真実か)、自分の声の録音(それが最も良く聞こえます。仮ナレーションは代役です)、そして視聴と聴取とフィードバック。あなたはリアルタイムで聞いたり見たりすることはできません。あなたはレベル、スペクトル、オンセット、サンプリングされたフレームから作業し、タイミングには良いですが、センスには信頼できません。
- クイックウィンモード:1つのアニメーションシーンまたはチャート、約30分、オーディオなし。
references/workflow.mdを参照してください。
プロンプトからどのモードを想定するかを述べてください(1つのシーンまたはチャートならクイックウィン、ナレーション付きフィルムならアニマティック)。続行します。間違っていればユーザーが訂正します。
プレビュールール(厳守)
プレビューとは、Chromeでのライブ表示を意味します。決してエンコードではありません。 プレビューするには:
- Motion Canvasエディタを(
film/でnpm start)バックグラウンドで起動するか、実行中のままにしておきます。 - ユーザーにURL(通常は http://localhost:9000)を渡し、可能であればChromeで開きます。
- ミックスされたオーディオトラックをエディタに読み込み、画像と音声が一緒に再生されるようにします。
- ファイルが変更されたときはホットリロードに依存します。編集のためにエディタを再起動しないでください。
エンコードするのは (a)ユーザーが要求したレビュー用リール と (b)最終版のみ です。「確認のために」mp4をレンダリングしたり、ユーザーにレンダリング結果を開いて確認するように求めたりしないでください。エディタが実行されていない場合は起動してください。オーディオを変更した場合は、リロードするように伝えてください(オーディオは一度だけ読み込まれます)。
フェーズ0b: ブートストラップ(ツールのみ、パスごとに延期)
プロジェクトルートに animator.config.json があるか探します。存在する場合はそれを読み込み、チェックを再実行して続行します。
そうでない場合:
- 環境チェックを実行します:
scripts/check_env.sh(macOS、Linux)またはscripts/check_env.ps1(Windows、powershell -NoProfile -ExecutionPolicy Bypass -File <パス>、Git Bashからも可能)。ツールは実行可能である場合にのみカウントされ、PATH上にあるだけではカウントされません(Windowsではpythonはストアのスタブであることがよくあります)。メモリ、コア数、ディスク容量はレポートから取得します。ユーザーに尋ねないでください。 - サイズを含む1画面の計画を表示し、承認を待ちます。ブートストラップはツールのみです。クリエイティブな質問はしません。
references/setup.mdに従ってインストールします(brew / apt / winget、Pythonはプロジェクトローカルのvenv内でuvを使用)。その時点での現在のURLとライセンスを確認してください。モデルやサンプルをリポジトリにベンダリングしないでください。- スモークテストを実行し、
animator.config.json(ツールのパス、ディレクトリ)を書き込み、コミットします。
アニマティックに必要なもの(最初にインストール):Node、Motion Canvas、ffmpeg、uv(Python with numpy、scipy、soundfile)、Kokoro(仮ナレーション)、フォースドアライナー。以降のパスに延期:FluidSynth、サンプルライブラリ、Chatterbox、最終スコア用のもの。小さなダウンロードは問題ありません。大きなものは、ユーザーが必要とするパスに到達するまで待機します。
アーキテクチャ(これから逸脱しないこと)
script.md -> voice (scratch, then real) -> forced alignment -> events.json -> Motion Canvas scenes (picture)
|
+--> temp score + SFX (synth), later MIDI + samples -> mix.wav
mix.wav is loaded in the editor and in the final mux
events.jsonが唯一のタイムソースです。 画像、音楽、SFXはすべてそれを読み取ります。手動で測定したオフセットは使用しません。- シーンは時間の純粋な関数です。 同じ入力、同じフレーム。
Date.now()や非シードランダム性は使用しません。 - 1つのグローバルクロック。 フィルム全体が秒単位の1つのタイムラインです。その上に1つのスコアがあります。
- ストーリーにアンカーし、クロックにはアンカーしない。 音楽のフレーズやビートは名前付きイベントにアタッチし、小節番号や絶対秒数には決してアタッチしません。
- 音声を交換するとすべてのタイミングが再計算されます。 仮テイクを本番テイクに置き換え、
events.jsonを再生成し、画像と音楽は手動編集なしで移動します。これがパイプラインの受け入れテストです。
フェーズ
詳細は references/workflow.md にあります。アニマティックはすべてのレイヤーに対する1回の高速パスです。アップグレードは遅い部分であり、1レイヤーずつ、それぞれにユーザーゲートとコミットがあります。
| # | パス | 出力 | 時間 |
|---|---|---|---|
| A | アニマティック:概要 + 前提、スクリプト、仮ナレーション(Kokoro)、アラインメント、events.json、キャプション付きドラフトシーン、仮の音楽とSFX、mix.wav、Chromeでライブ表示 | 完全なドラフトフィルム | 約15分 |
| U1 | スクリプト:音読、>>> ノート、書き直し、パイプラインの再実行 | 最終スクリプト | 数時間 |
| U2 | 音声:ユーザーが(a)自分の録音 または(b)Chatterbox(オプションで自分の声からクローン、同意あり)を同等のものとして選択。ピック、編集、再アラインメント、イベントの再生成 | 最終ナレーション、すべてのタイミング再調整 | 数時間 |
| U3 | 音楽:イベントからMIDI、サンプルライブラリでレンダリング、ミックス | 本物の音楽 | 数時間 |
| U4 | ポリッシュ:画像の詳細、フッテージ、SFX、キャプションオフ、タイミング調整 | フィルム | 数日 |
| F | 最終:イメージシーケンスまたはビデオエクスポート、ffmpegでマルチプレックス | out/film_1080p60.mp4 | 数分 |
先に進まないでください。1ラウンドにつき1つのレイヤーをアップグレードし、ライブで表示し、フィードバックを得て、コミットします。
常に従うルール
ユーザーとの作業
- ディレクターのブリーフィングを受けるクルーのように作業します。 最初のプロンプトがブリーフです。前提を置き、アニマティック全体を一度に構築し、前提を
brief.mdの上部にリストアップします(長さ、トーン、声、音楽、プラットフォーム、何がモックされているか)。ユーザーが修正できるようにします。事前のインタビューはしません。何かが本当にブロックされた場合(トピックがない、オーディエンスがない、矛盾する目標)のみ質問し、その場合は1つの質問をします。 - 迂回の前に1つの短い質問をし、後ではありません。ユーザーが何かが欠けている、または間違っていると言った場合、新しいものを追加する前に、まずそれが正しかった時から何が変わったか(再テイク、カット、タイミング変更)を尋ねます。
- 何かを見たり聞いたりしたと決して主張しないでください。測定したことを伝え、ユーザーに見て聞くように頼んでください。
- ノートはファイルに記録します。ユーザーは
script.mdに>>> note行を書きます。それぞれをスクリプトまたはステージディレクションに反映し、マーカーを削除し、何をしたかを伝えます。 - 仮ナレーションは代役であり、自分の録音が最も良く聞こえることを伝えてください。
スクリプトと音声(references/voice.md)
- 話される英語:短く、具体的で、インパクトがあります。AI的な表現は避ける:「quietly」、「seamlessly」、「delve」、「tapestry」、「testament」、「it's not X, it's Y」、三重積み上げ。
- すべての行にはIDがあり、それ自体が独立した録音です。プレーンに録音し、ポストでレベルを修正します。
- 仮ナレーション:Kokoro、無料でオフライン。OSの音声(
say、SAPI、espeak)は使わないでください。非商用ウェイトを避けてください。仮オーディオでもアラインメントを実行するため、最初のアニマティックからevents.jsonが存在します。
画像(references/motion-canvas.md)
- デフォルト 1920x1080、60 fps。要求がない限り4Kは使わない。
- メモリガード。
shadowBlur、毎フレーム再描画される大きなブラーレイヤー、何千もの個別にフィルターされたシェイプは使用しないでください。グロウは、数本の幅広で低アルファのストローク、または1つのキャッシュされたスプライトで偽装します。ユーザーが開く前に、重いシーンをウォッチドッグテスト(RSS制限)します。一度に1つの重いプロセスのみ。レンダリング中にオーディオやイベントを再構築しないでください。 - シーンがキャンバスに描画する場合、すべてのヘルパーで状態を復元します(
save/restore、globalAlphaのリセット)。アルファ漏れはちらつきを引き起こします。 - フィルム内の製品デモは小道具です:スクリプト化され、録音または偽装されたUIであり、ライブではありません。
音楽(references/music.md)、ユーザーが上書きできるデフォルト。仮スコアにも適用されます。
- 音声の下で固定レベル、ダッキングなし、音声より約10 dB低い。レイヤーは音量ではなく色彩を追加します。
- ナレーションの下にアルペジオやリズミカルなフィラーはなし。パッド、サブ、テーマ、スウェル、ライザー、無音。
- 無音へのカットはドライで、リバーブの前なので、部屋の残響が消えます。
- 仮スコアとSFXは、
events.jsonクロック上でPythonで合成され、大規模なダウンロードはゼロ。サンプルライブラリはU3まで待ちます。
プロセス
- Windows: 最初に
references/setup.mdのWindowsセクションを読んでください。パスを引用符で囲み、生成されたシェルスクリプトはLFのままにし、プロジェクトパスは短く保ちます。 - 小さなコミット、レビュー済みラウンドごとに1つ。明示的なパスをステージングします。生テイク、モデル、サンプル、
node_modules、レンダリングはコミットしないでください。.gitignoreを提供します。 - レビュー用リール:ユーザーが要求した場合のみ。変更されたスパンだけを、前後2秒のコンテキストを付けて、720p30、オーディオ付きでエンコードします。
- ビルドガード:フレームがエクスポートされた後にミックスが変更された場合は最終版の組み立てを拒否し、レンダリング中はビルドを拒否します。コードで強制します(ロックファイル、エクスポートの横にハッシュ)、約束ではなく。
- 高価なステップ(アラインメント、合成、ステム)を入力ハッシュでキー指定してキャッシュします。
何かがうまくいかないとき
最初に references/lessons.md を読んでください。既知の落とし穴:破裂音を食べてしまうデクリッカー、ブラウザキャッシュから提供される古くなったミックス、1つのマイクに2つのタブ、行末のコメントが閉じ括弧を飲み込む、空間オーディオヘッドホンがステレオミックスをモノラルに聞かせる。
ファイル
references/workflow.md:アニマティックと各アップグレードパス、ゲート、クイックウィンreferences/events-schema.md:events.jsonの形式とルールreferences/motion-canvas.md:プロジェクト設定、イベント駆動のシーン、プレビュー、エクスポート、パフォーマンスガードreferences/music.md:仮スコアとSFXの合成、1つのクロック上のMIDI、サンプル、ミックスreferences/voice.md:スクリプト音声ルール、仮TTS、録音、ピック、編集references/lessons.md:振り返りの要約references/setup.md:ブートストラップ、インストールコマンド付きデフォルト、animator.config.jsonscripts/check_env.sh、scripts/check_env.ps1:コンパクトなツールレポート(べき等、読み取り専用)templates/:events.example.json、Motion Canvasのevents.tsとシーンスケルトン