Communitygithub.com

InkToFilm

1つのプロンプトまたは脚本から、各カットがストーリーに沿っているかを確認しながら完成したAI映画を制作します。Claude CodeとCodexに対応したスキルです。

InkToFilm とは?

InkToFilmは、ユーザーがコードを書いたり、コマンドを実行したり、モデルを理解したり、脚本を準備したりすることなく、自然言語のプロンプト1つから完全なAI映画を制作できるスキルです。Claude CodeとCodexの両方で動作し、デフォルトの30秒、16:9のシネマティックな短編または予告編を生成します。このスキルは、fal MiniMax H3 Maxをデフォルトの動画生成モデルとして使用し、各カットの評価をストーリーに沿って行い、不適切なカットを再生成することで品質を保証します。ユーザーは創造的な方向性を提供するだけでよく、不足している部分はスキルが適切なデフォルト値または簡潔な提案を行います。料金はfalプロバイダーの現在のレートに基づき、承認された予算上限を超えないように制御されます。

対応✓Claude Code✓Codex CLI~Cursor
npx skills add yingwang/inktofilm

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

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

ドキュメント

InkToFilm(インク・トゥ・フィルム)

1つの自然言語プロンプトを完全な出発点として扱います。ユーザーはコードを書いたり、コマンドを実行したり、モデルを理解したり、脚本を準備したりする必要はありません。

ユーザー体験

  • ユーザーのアイデアから始めます。重要な創造的な方向性が不足している場合は、強力なデフォルト値を設定するか、承認を得るために1つの簡潔なコンセプトを提案します。映画を大きく変える質問のみを行います。
  • セットアップ、計画、生成、評価、リトライ、編集をユーザーの代わりに実行します。ユーザーが尋ねない限り、内部コマンド、プロバイダーのペイロード、実装の詳細を表示しません。
  • 長さとフォーマットが指定されていない場合、デフォルトで完全な30秒、16:9のシネマティック短編または予告編を生成します。長編映画やシリーズの場合は、最初に承認された短編のプルーフ・オブ・コンセプトを作成し、その後、共有キャラクターと世界観のバイブルを基に、章またはエピソードごとに続けます。

プライベートセットアップと有料生成

既存のInkToFilmチェックアウトが利用可能な場合はそれを使用します。それ以外の場合は、https://github.com/yingwang/inktofilm からプロジェクトローカルのチェックアウトとプロジェクトローカルの環境を準備します。システム全体の設定は変更しないでください。本番環境の前に、FFmpeg、FFprobe、およびfalクライアントを確認します。inktofilm doctor で不足しているものを報告します。

  1. FAL_KEY をプロセス環境、次にプロジェクトローカルの .env で探します。CLIは環境のみを読み取るため、ファイルを実行するシェルにロードします(例:set -a; ./.env; set +a)。値を絶対に表示しないでください。
  2. キーがない場合は、ユーザーに1回だけfal APIキーを尋ねます。サインインしたブラウザが利用可能な場合は、チャットでキーを露出させる代わりに、明示的な承認を得てAPIスコープのキーを作成してコピーするオプションを提供します。
  3. キーをエコー、ログ、要約、プロンプトへの配置、またはコミットしてはいけません。無視されたローカルの .env にモード 0600 で保存し、コミットまたはプッシュの前にGitがファイルを無視することを確認します。
  4. 現在のプロバイダーの価格を読み、生成される秒数とリトライ許容量を見積もり、ハードな支出上限を明示し、最初の有料リクエストの直前に確認を得ます。承認された上限を超える前に停止します。falはMiniMax H3 Maxを生成秒単位で課金し、nano-bananaを静止画単位で課金するため、静止画と数回のリトライを含む5ショット30秒の映画は通常数ドルかかります。現在の料金については、仮定するのではなくモデルページを確認してください。

映画を制作する

このスキルを実行しているエージェントでクリエイティブ作業と判定作業を行い、fal MiniMax H3 Maxをデフォルトの動画ジェネレーターとして使用します。ユーザーが明示的に選択したモデルは尊重します。

  • Claude Code では、あなたがプランナー兼ジャッジです。脚本、計画、テストスイートを自分で書き、以下のステージを進めることで、すべての画像が動画クレジットが消費される前にチェックされるようにします。ショットを判定するには、inktofilm frames で評価者が使用するのと同じ等間隔のフレームをサンプリングし、それらを直接検査し、レビュー済みのケースごとの結果JSONを書き、inktofilm run suite.json --semantic-results で再生します。サンプリングされたフレームに表示されているもののみをスコアリングし、結果の来歴に自身のモデル名を記録します。
  • Codex では、CLIの組み込み統合が認証されたCodex CLIを介して同じ作業を行います:inktofilm run --semantic-codex で判定し、inktofilm produce のデフォルトのプランナー兼ジャッジとして機能します。
  • ユーザーが無人で実行を完了したい場合は、ループ内で判定する代わりにCLIに判定を委ねます:inktofilm run --semantic-claude、または inktofilm produce --judge-claude(必要なのはClaude Codeとfalキーのみ)。既に作業中の場合はループ内で判定することを優先します。なぜなら、モデルを1つで済ませることができ、アサーションがたまたま尋ねなかったことに気づくことができるからです。
  • その他のモデルは、JSONのstdin/stdoutフック(--semantic-command、--planner-command、--judge-command、--video-command)を介して接続できます。
  • どのジャッジが実行されても、計画が書いたアサーションのみをスコアリングします。実際に繰り返し発生する失敗(画面上のテキストの捏造、フレームに焼き付けられたレターボックス、誤った文化に流れる衣装、シーンと矛盾する表情など)に対するアサーションを記述します。

段階的なワークフロー

inktofilm produce は再開可能です:出力ディレクトリにすでに存在するポートレート、静止画、ショットの試行は再利用されるため、レビュー後に同じコマンドを再度実行しても、不足している作業のみが課金されます。

  1. script.md と plan.json を自分で書き、次に inktofilm produce script.md --plan plan.json --stills-only -o <プロジェクト> を実行します。これにより、キャラクターごとに1つのポートレート、ショットごとに1つの静止画がレンダリングされ、停止します。すべての画像を開きます。キャラクターと一致しないポートレート、フレーミングが間違っている静止画、年齢が間違っている顔、余分な人物、プロップ上のテキストは、ここで修正するのが安価で、クリップで修正するのは高価です。ファイルを削除し、プロンプトを調整して、同じコマンドを再度実行します。
  2. --no-judge を指定して撮影します(ループ内で判定を行う場合)、または --judge-claude を指定します(無人実行の場合)。--no-judge はメディアチェックを実行し、各ショットの最新の試行を選択し、選択されたクリップの suite.json を書き、プレーンカットの final.mp4 をアセンブルします。
  3. 各ショットについて、inktofilm frames shots/<shot>-attempt-1.mp4 でジャッジが表示するフレームをサンプリングします。それらを確認し、レビュー済み結果ファイルを書き、inktofilm run suite.json --semantic-results reviewed.json -o review で再生します。
  4. 失敗したものだけを再生成します:--reshoot <shot_id> はそのショットに新しい試行を与え、ディスク上のものの後に番号が付けられ、他のすべては再利用されます。失敗がプロンプトのせいである場合は、最初にプロンプトを編集します。新しいテイクを古いものと比較して判定し、新しい方が常に良いと仮定しないでください。古いテイクが勝った場合、--select <shot_id>=<attempt> でそのショットのクリップに戻し、マニフェスト、suite.json、final.mp4 がすべてレビュアーの選択に従うようにします。
  5. プレーンカット以上の編集(オーバーラップ、サウンドブリッジ、ダイアログ、ローカルでタイトルカードを設定)が必要な場合は、FFmpegを使用して最終編集を自分で行います。

生成に耐えるプロンプトの書き方

  • 各ビデオプロンプトのキャストバイブルは、ショットがリストするキャラクターのみをカバーするため、それらをリストしてください。キャスト全体を記述する単一キャラクターのショットは、他のキャラクターを背景に配置する傾向があります。
  • リファレンスポートレートは、ショットの characters の順序で静止画エディターに渡されます。静止画プロンプトではその順序で参照します(例:「最初のリファレンス画像の女性」)。それでも髪、肌、衣装を再記述してください。リファレンスはアイデンティティを固定し、言葉はフレームを固定します。
  • 静止画を写真として記述します:フレーミング、各人物の位置、ショットが始まった瞬間に彼らがしていること、光、レンズ。パドル、看板、スクリーンなど、テキストが含まれる可能性のあるものには「テキストなし」と記述し、すべての静止画プロンプトを「フレームの端から端まで全体を埋める、黒いバーなし、レターボックスなし」で終了します。そうしないと、ワイドな establishing フレームは映画用のバーが画像に焼き付けられて戻ってきて、ビデオがそれを継承します。
  • ポートレートは、書かれているよりも古く、整った状態にドリフトします。年齢を2回指定し(「25歳、25歳以上ではなく25歳と読める」)、髪を長さと状態で記述し(「上部5センチ、片側に流し、撫で付けず、バズカットではない」)、残りのフィルムで使用される光とパレットを指定します。そうしないと、孤立したショットが隣のショットとは異なる色温度で戻ってきます。
  • 静止画が拒否された場合、削除する代わりに rejected/ フォルダーに他の静止画の隣に移動します。再実行は不足しているものだけをレンダリングし、新しいテイクが正しかった構図を失った場合、古いテイクは利用可能なままです。
  • ショットに静止画がある場合、ビデオプロンプトを「提供されたフレームで正確に開始」で始め、同じ顔、髪、衣装を保つ人物を指定します。増殖してはいけないプロップの数を指定します。
  • MiniMax H3 Maxはネイティブサウンドとリップシンク音声を生成します。話されたラインについては、プロンプトに正確な単語を引用し、話者を指定し、自然な口の動きと字幕なしを要求します。計画の dialogue フィールドにも同じ単語を入れ、ジャッジがチェックできるようにします。受け入れられる長さは、480Pまたは768Pでショットあたり5〜15秒です。2行のダイアログには5秒ではなく6秒が必要です。フレームで何が言われたかを確認できないため、ネイティブオーディオを文字起こしし(ローカルの whisper.cpp で十分)、スクリプトと比較します。モデルは群衆シーンでつぶやくラインを即興で作ることもあるため、書いたラインだけでなくトランスクリプト全体を読んでください。
  • キャラクターの目に「映り込む」または「反射する」光は、文字通り光る虹彩としてレンダリングされます。目は自然な色を保ち、目の色付きの光を禁止するように指定します。
  • 手に持った2つのプロップは、静止画が何を示していようと、数フレーム以内に1つの手に融合する傾向があります。プロップが重要な場合は、手ではない場所(口、ポケット、テーブル)を与えるか、オプションであることを計画し、どの手が何を持っているかではなく、ステージングでテイクを判定します。
  • ショットを次のショットの被写体への視線で終了します(カットの前に前列に一瞥を向け、彼女が振り返る)。これにより、2つの生成としてではなく、因果関係としてつながりが読まれます。
  • FFmpegアセンブリでは、concat はマイクロ秒のタイムベースを出力し、後続の xfade が拒否します。ディゾルブとハードカットを混在させる場合は、concatの前後で各ビデオチェーンを settb=1/<fps> で固定します。各クリップを計画された長さにトリミングして、タイトルカードが完全な実行時間を維持できるようにし、クリップの長さを想定せずにファイルから読み取ります。
  • ビデオプロンプトをステージマネージャーとしてではなく、撮影監督として書きます。ブロッキングの前にメディアと物理から始めます:「フォトリアリスティックな実写 <ジャンル> フィルム、アニメーションではない、ゲームのカットシーンではない」、レンズ、光の発生源、空気の状態(霧、霜のほこり、雨)、および「物理的に信頼できる布、髪、重量」。ほとんどがブロッキングと禁止事項(「座ったまま」、「誰も場所から動かない」、「最初のフレームと同じ顔」)であるプロンプトは、ピクピク動く写真を返します。モデルは指示されたものだけをアニメートし、残りはフリーズさせます。その静止は偽物として読まれます。安定させなければならないものを1つの節(1つの剣、両方の顔)で指定し、5つの節で指定しないでください。
  • すべてのアクションに時計を与えます:「最初の0.5秒以内に」、「中間点で」、「最後の1秒で」。時間指定のないアクションは決して到着しないか、助走に費やされ、時間指定のビートがないショットは、ポーズをとる人々へのスロープッシュインとして戻ってきます。
  • 戦闘シーンがあるフィルムの visual_style に「スローモーション」や「優雅で、急がない」と決して書かないでください。スタイルはすべてのショットで再記述されるため、すべてのやりとりが浮遊して到着し、戦闘にリズムがなくなります。スタイルに「リアルタイム速度」と指定し、戦闘プロンプト内でテンポを構築します。やりとりを数え(「最初の2秒で3回のカットと3回のパリー」)、停止に名前を付け(「刃がロックし、1ビート保持」)、次に解放(「彼女がロックを破り、次の連続攻撃はより速い」)、そしてスピードランプは1つの衝撃にのみ存在させます。コントラストがリズムとして読まれます。均一な優雅さはスローとして読まれます。
  • 下向きの出口は落下として読まれます。「軒先から足を踏み出し、霧の中に落ちる」人物は、プロンプトがどれほど軽くても、ビルから飛び降りる人として視聴者に見られます。屋上シーンは屋上で終了するか(乾杯、鞘に収めた剣、一瞥)、または目に見える着地と重量を伴う独自のショットで降下を撮影します。
  • 視聴者に耐えられるダイアログは、格言ではなくドラマのダイアログです。2つの対称的な警句(「霜は冷たく、ワインは冷たくない」)は書かれたように聞こえます。転回のあるプレーンなやりとりは話されたように聞こえます。ユーザーが好きなシーンを挙げた場合、そのシーンのやりとりのロジック(述べられたルール、主張された抜け穴、簡潔な命令、生意気な拒否)を借用し、それを自分のキャラクターの口調で彼らの口に入れ、各行を与えた秒数で言えるほど短く保ちます。
  • ワイド、ランドスケープ、アクション、スケールのショットにはテキスト・トゥ・ビデオを選択します。モデルは動きを所有し、クリップは撮影されたように読まれます。顔や正確な構図が静止画と一致しなければならないショットにはイメージ・トゥ・ビデオを予約し、そこでもアクションを前倒しにします。磨かれた静止画は動きにとって負債です。写真がきれいであればあるほど、クリップは目覚める写真のように見えます。ユーザーが同一の顔よりも説得力のある動きを好む場合は、計画にそのように記述します。still_prompt と reference_prompt を空のままにし、各キャラクターの description でアイデンティティを伝えます。この説明は、そのキャラクターをリストするすべてのショットで制作プロンプトが逐語的に再記述します。
  • ファイルサイズではなく、ソースでエンコードを判断します。rawプロバイダークリップのビットレートとアセンブルされたフィルムのビットレートを比較します。同じエンコーダー設定で最終的な数値が大幅に低い場合、クリップが静的だったことを意味し、エンコードがロスだったわけではありません。CRF 16以下、-preset slow でアセンブルし、プロバイダーのフレームサイズを維持し(768Pクリップをどちらの方向にもリサイズしない)、ユーザーがポストで品質が失われたかどうかを尋ねた場合、配信ノートにそのように記述します。
  • ダイアログショットを計画された長さにトリミングする前に、トランスクリプト(whisper-cli -ml 1)から単語のタイムスタンプを読み、最後の単語が出力オーディオフェードが始まる前に終了するのに十分な長さにクリップを保ちます。クリップを生き延びたラインでも、ディゾルブで最後の音節を失う可能性があります。アセンブルされたフィルムのダイアログウィンドウを再文字起こしします。rawクリップだけでなく。
  • 発話のないクリップのトランスクリプトは発話の証拠ではありません。whisperは安定したアンビエンス上に短いラインと字幕クレジットを捏造します。「即興」のラインのために再撮影する前に、タイムスタンプとラウドネスエンベロープで確認します(発話はアンビエンスフロア上のピークとして表示されます)。
  • リファレンスポートレートから編集された静止画は、ポートレートの顔を継承しますが、天気を発明します。すべての静止画プロンプトで空、降水量、季節を固定するか(「晴天の夜、タイルに霜、雪なし」)、そうしないと、顔が一致したクローズアップが、残りのフィルムが晴れているのに吹雪の中に到着します。[... 以下、翻訳の都合上、一部省略]

関連スキル