Taste Application
パイプラインの後半部分です。taste-distillation はリファレンスを計測してスタイルパックを作成します。このパートでは、そのスタイルパックに対して生成を行い、結果をカットします。
実行と納品に関する契約
オリジナルの実装は scripts/ に含まれています。ito-video の個別チェックアウトは必要ありません。ローカル処理のためには scripts/requirements.txt をインストールしてください。プロバイダ実行時のみ scripts/requirements-live.txt をインストールします。ライブでのアップロード、サブミッション、ダウンロードには、認証情報に加えて TASTE_FORGE_ALLOW_LIVE=1 の明示的な設定が必要です。ユーザーの許可された実行に対してのみ設定してください。--dry-run は認証情報不要で、ラベル付きプレースホルダを生成します。あいまいなプロバイダのタイムアウトは、新たな有料ジョブとして再試行されません。別のサブミッションが正当化されるかどうかを判断する前に、プロバイダのリクエストを検査してください。
プロバイダを呼び出さずに、既存の完了したテイクを使用します:
python scripts/pipeline.py --genre example --root stylepacks \
--takes media/take-a.mp4 media/take-b.mp4 --duration 12 --fps 30 \
--out out/review-v1.mp4
--duration は ベストエフォートのカデンツターゲット であり、厳密な実行時間ではありません。完了したショットは、より短いまたは長い編集を生成する可能性があります。アセンブラは、ターゲットに合わせるためにクリップを複製したりパディングを追加したりしません。出力マニフェストには実際の duration が保持され、要求された秒数と実際の秒数、不足、超過、および cadence_target ポリシーを含む duration_contract が追加されます。少なくとも1つの出力フレームの差は明示的に警告されます。厳密な duration モードは提供されていません。正確な実行時間が必要な場合は、領収書を検査し、納品前にカットを修正または拒否してください。
パイプラインは、編集可能な FCPXML と EDL がそれらを参照するため、各実行のグレーディング済みショットファイルを保持します。出力の衝突を拒否し、タイムラインのエクスポート失敗を報告します。完了したレンダリングは、保存されたエディタープロジェクトやクリエイティブな承認ではありません。ライブ編集の前後で、ソースアセットとバージョン管理されたプロジェクトのチェックポイントを保存してください。保存されたパスとダイジェストは、メモリ内のタイムライン領収書とは別に記録してください。
クローン可能な Fal グラフとそのオフライン入力コンパイラは、workflows/README.md に文書化されています。サブミッション前にブリーフとスタイルの方向性をコンパイルしてください。切断されたスキーマフィールドがモデルのプロンプトに影響を与えると想定しないでください。有料実行の前に、現在のエンドポイントフィールドを実際のプロバイダに対して検証してください。
Blender には、テクスチャ付きの完全なソース GLB を使用してください。リトポロジーは個別に名前が付けられた派生物であり、そのソースを決して置き換えません。blender_prop.py は、明示的な --width 1920 --height 1080 --fps 30 --receipt receipt.json をサポートし、パック由来のリムライティングとマテリアルテクスチャを保持します。シーンを保存することは、レンダリングとは異なります。領収書の状態とパックされた画像を検査してください。
Resolve オーバーレイには、明示的に選択され、バージョン管理されたターゲットから注入されたオブジェクトを指定して、taste.resolve.apply_placements を使用してください。そのホストで検証された規則に source_end_mode を設定してください。Resolve のバージョンをまたいで、インクルーシブなソースエンドを想定しないでください。アダプターは、保存されたトラックの上に重なるエフェクトを割り当て、すべての配置を即座に、そしてすべての追加後に再度チェックします。コンポジット整数は、インストールされている API と一致している必要があります。確認済みの Studio 21 ホストでは、Screen は 5 であり、過去のビルダーの誤った 22 ではありません。領収書は、メモリ内の配置のみを証明します。プロジェクトを保存し、そのチェックポイントを確認してから、納品を報告する前に正確なレンダリング出力を検査してください。
アクティベーションのタイミング
- "このスタイルで動画を作成" / "パックを適用" / "このフッテージを補完"
- 生成されたクリップを実際の編集リズムを持つものに組み立てる
- ルックから 3D プロップを作成し、動画に戻す
- 完成品が実際にリファレンスと一致することを確認する
役割分担
モデルは、コンテンツ、モーション、フレーミング、ライティング構造を提供します。パックは、色とリズムを提供します。 これはスタイル的な好みではなく、計測されたものです。詳細は taste-distillation を参照してください。実用的な結果:
- 生成プロンプトには 色に関する記述を一切含めない でください。"色:なし。ニュートラルにレンダリング。グレーディングは後で適用。" を追加してください。
- 2つの別々のフラグ を維持してください:
--brief(何が起こるか:被写体、アクション、場所)と--style-steer(見た目)。これらをマージすると、スタイルの単語がシーンに漏れ出し("ティール" がティールのオブジェクトになる)、被写体の単語がグレードに漏れ出します。 - モデルは、グローバルなルールよりも 局所的でチェック可能なルール に非常に良く反応します。"背景は真っ黒で無照明。被写体は白に向かって吹き飛ばす" は機能しますが、"極端なコントラスト" は機能しません。
ショットではなくテイクを生成する
"カデンツに合わせる" を素直に解釈すると、ショットごとに1つの生成になります。これは経済的に不合理です。平均 0.78秒/ショットのリファレンスを、最低4秒のエンドポイントで処理すると、10秒の作品のために 12回の呼び出し、48秒の生成、10秒使用(効率21%) となり、12の無関係なクリップが連続して読まれるべきものに縫い合わされます。
エディターは長いテイクをロールし、その内部でカットします。ショットを約5秒のテイクにグループ化すると:3回の呼び出し、13秒の生成、効率77% となり、連続するショットは同じ生成からのものであるため、互いに実際に属するものになります。
どのような形状を望むかをモデルに伝えないと、スローなロックオフプッシュをレンダリングし、その内部の6つのカットは吃音として読み取られます:
"内部にハードカットのない、1つの連続したテイクとして撮影されました。編集では約0.8秒の6つのピースにカットされるため、フレーミング、被写体、照明は全体を通じて変化し続ける必要があります。どの0.8秒のウィンドウも、それ自体で1つのショットとして成立する必要があります。"
カットのルール
- 再エンコードし、ストリームコピーはしないでください。 ストリームコピーはキーフレームでのみカットします。0.78秒では、ショット長はすべての境界を最も近い GOP に丸め、パイプラインが存在する目的そのものを破壊します。
- 既存のフッテージを補完する場合、そのフッテージ自身のショット境界を使用してください。 ベースビデオを連続したピースにスライスして順に再生すると、オリジナルが再構築されるだけです。すべての「カット」はショットの途中に着地し、見えなくなります。測定したところ、20ショットのアセンブリでは12の検出カットしか登録されませんでした。実際の境界を検出し、連続した選択が必ず不連続になるように N 番目ごとに取得してください。これにより、カット測定値が 0.78秒のターゲットに対して 1.29秒から 0.83秒に改善されました。
- ショット長はリファレンスの平均ではなく分布からサンプリング することで、カットがリズムのばらつきを継承し、均一なクリップに平坦化されるのを防ぎます。
グレーディングのルール
- クリップがある場合は、焼き込み LUT よりも直接測定が優れています。 クリップを測定し、その L* CDF に一致させ、ゾーンクロマを適用します。
grade_clip_directは MAE 1.58、コントラスト 34.0(ターゲット 34.7 に対して)を達成しました。 - クリップのヒストグラムがリファレンスと異なる場合は、CDF マッチではなくアンカーを使用してください。 68% 黒の生成クリップを賑やかなリファレンスヒストグラムに強制すると、背景全体が黒から持ち上げられました。背景保存率は 26.0%(CDF)に対して 69.0%(アンカー)に低下しましたが、MAE とコントラストはどちらも依然として優れていました。デフォルトはアンカートーンにしてください。
- バッチサイズは重要です。 48フレームを一度にグレーディングするとプロセスが OOM で強制終了されました。6 フレームは安全です。
復元された fal プラットフォームの動作
これらの観察結果とエンドポイントの例は、復元されたワークフローからのものです。現在のエンドポイントメタデータを再確認してください。これらは、将来のすべてのプロバイダバージョンに関する保証ではありません。バンドルされているグラフテンプレートは、個別に検証されたワークフロー入力(明示的な生成オーディオ制御を含む)を記録しています。
これらは発見するのに実際の時間がかかります。グラフを設計する前に確認してください。
| 制限 | 詳細 |
|---|---|
| 3Dレンダラーはまったくない | fal には image-to-3d、text-to-3d、3d-to-3d しかありません。すべての 3d-to-3d エンドポイントは別のメッシュを出力します。3d-to-image/3d-to-video カテゴリはないため、ミントされた GLB は fal のビデオグラフに 再び入ることはできません。ローカルでレンダリングし、fal-ai/ffmpeg-api/images-to-video を使用してください。 |
| compose はオーバーレイできない | fal-ai/ffmpeg-api/compose は、2番目のトラックを拒否します。「複数のビデオトラックはサポートされていません」— そして image トラックもビデオトラックとしてカウントします。1つのビデオトラックのみをシーケンスします。ffmpeg を使用してローカルでコンポジットしてください。 |
| compose のキーフレームはミリ秒単位 | 応答にはそのように書かれていません。秒単位で送信された実行は受け入れられ、1000倍短いビデオを返します。 |
| extract-frame は first/middle/last のみ提供 | 任意のタイムスタンプはありません。3つのフレームを3つの異なるコンディショニング画像として使用してください。 |
| DAG にループも文字列連結もない | ショットごとの分岐はノードごとに作成するか、ローカルに保つ必要があります。 |
| Kling 3.0 に reference-to-video はない | v3 ラインはテキスト/画像/モーションコントロールのみです。reference-to-video は o3 ラインにあります:fal-ai/kling-video/o3/pro/reference-to-video。 |
| プレフィックスは統一されていない | bytedance/*、tripo3d/*、meshy/*、minimax/*、openai/* には fal-ai/ プレフィックスがありません。kling-video、veo3.1、flux-*、hunyuan-3d、ffmpeg-api にはあります。 |
エンドポイントの選択
| スロット | ベスト | 価格代替案 |
|---|---|---|
| reference→video | bytedance/seedance-2.5/reference-to-video(~$0.473/秒 @720p) | fal-ai/kling-video/o3/pro/reference-to-video(~$0.112/秒) |
| image→3D | fal-ai/hunyuan-3d/v3.1/pro/image-to-3d($0.375、最大8ビュー) | tripo3d/h3.1/image-to-3d($0.20) |
| text→3D | fal-ai/hunyuan-3d/v3.1/pro/text-to-3d | tripo3d/h3.1/text-to-3d |
| リトポロジー | fal-ai/hunyuan-3d/v3.1/smart-topology($0.75) | tripo3d/tripo/remesh(約75倍安い) |
| パーツ分割 | fal-ai/hunyuan-3d/v3.1/part(FBXのみ) | tripo3d/tripo/segment |
| text→image | fal-ai/nano-banana-pro($0.15 固定) | fal-ai/flux-2-pro($0.03/MP) |
Seedance は同じ5秒に対して Kling o3 の約4倍の価格です。複数参照の忠実度(最大50の混合画像/ビデオ/音声参照)でその価値を発揮し、単一の静止画像で条件付けする場合は 価値を発揮しません。
モデルIDと価格は変動します。それらのいずれかを約束する前に、fal.ai/models で確認してください。
3D ブランチ
python mint3d.py --genre <名前> --from-stills 4 --retopo --render
python mint3d.py --genre <名前> --prompt "ひび割れたクロムバイザー" --render
- 最初にクリーンなプレートを生成してください。リファレンスの静止画から抽出しないでください。 エンドポイントの記載された入力要件は、シンプルな背景、単一オブジェクト、オブジェクトがフレームの50%以上であることです。リファレンスリールはその逆です—コラージュ、ワイドショット、複数の被写体、焼き込みグラフィックス—そしてそれらは彫刻的なノイズを生成します。テキスト→単一オブジェクトプレート→メッシュの費用は約$0.15余分にかかり、これが使用可能なメッシュと廃棄されるメッシュの違いです。
- マルチビューは、リストではなくアングルごとの名前付きフィールドです。
input_image_url(前面、必須)、次にback_image_url、left_image_url、right_image_url、left_front_image_url、right_front_image_url、top_image_url、bottom_image_url。input_image_urlsもmulti_viewフラグもありません。それらをでっち上げると、機能しているように見えながら、すべてのミントをシングルビューに劣化させます。間違ったアングルラベルは、ビューを省略するよりも悪影響です。なぜなら、モデルはそれを信頼するからです。 - GLB を位置ではなくキーで指定してください。 応答には、
model_glbと共にthumbnailPNG とmodel_urlsブロックが含まれます。最初のURLを取得しても、キーが並び替えられるまでは機能し、プレビューPNGは問題なくダウンロードされます。Blender がそれを開くことを拒否するまで、何も失敗しません。 - PBR マップを要求してください。 これらがないと、メッシュは塗装された段ボールのように照明されます。
- 誰かが編集またはリギングする場合は、リトポロジーを実行してください。 生成されたメッシュは高密度で混沌としています。
- ループを閉じるためにローカルでレンダリングしてください。 ターンテーブルがフレームになれば、それはフッテージです。下流のすべてのステージはすでにフッテージを処理しています。グレーディング、カット、要素としてのスクリーン表示、またはコンディショニング参照としてのアップロードが可能です。バイナリが PATH 上にある場合は Blender を使用してください。軽量な依存関係のソフトウェアラスタライザーをデフォルトとして維持してください。ヘッドレス GL コンテキストはコンテナで最も一般的に欠落している単一のものであり、ワークステーションでのみ動作するレンダラーはパイプラインの一部ではありません。
検証してから信頼する
他のすべてのステージは結果を主張します。それを確認し、モーメントだけでなく分布形状 を確認してください:
background— L*10 未満のフレームの割合と パックの 値を比較。ソースクリップではなくリファレンス と比較してください。68% 黒の生成ソースは、24~55% のバンド内のどのリファレンスよりも黒いため、「ソースの黒を保存する」は間違ったことを要求し、同様に持ち上げられたグレードを許容します。chroma_mae— ゾーンごとの a*/b* 誤差。中央値 を使用します(パックのターゲットが測定された方法と一致させます。ここでの平均は、歪みに敏感な統計をロバストな統計と比較し、定義の不一致を誤差として報告します)。contrast/black_point/white_pointbanding— 占有されている L* ヒストグラムビンの 間の 空のビン。空のビンの総数をカウントしても機能しません。正当に暗いクリップには、空のハイライトビンがあります。cadence— 検出された平均ショット長とリファレンスの比較。
単位のトラップ に注意してください:OpenCV は dtype によって Lab 規則を変更します。float32 では、L* は 0~100、a*/b* は符号付きです。uint8 では、L* は 0~255、a*/b* は +128 バイアスされます。これらを混在させると、クロマ誤差が数百単位で報告されます。
完全なチェーン
python pipeline.py --genre <名前> --refs a.mov b.mov \
--brief "何が起こるか" --duration 12 \
--base-video existing.mp4 --out out/FINAL.mp4
mint → distill → (mint3d) → apply → forge → verify。ステージ1~3はキャッシュされるため、ブリーフを繰り返しても何も再測定されません。--dry-run はすべてのネットワーク呼び出しをスタブします。計画、プロンプト、トラックレイアウト、マニフェストはすべて実行されます。
アンチパターン
| しないこと | 理由 |
|---|---|
| ショットごとに1つの生成 | 効率21%、12の無関係なクリップ |
| プロンプトに色を入れる | 機能しないことが測定されています。LUT が望むニュートラルベースから遠ざけます。 |
| カットをストリームコピーする | キーフレームのみの境界がサブ秒のリズムを破壊します。 |
| ベースビデオを連続してカットする | オリジナルを再構築し、すべてのカットが見えなくなります。 |
| compose でオーバーレイできると信じる | できません。2番目のトラックを拒否します。 |
| compose に秒を送信する | 静かに1000倍短くなります。 |
| MAE だけで出荷する | 背景シェアチェックを追加してください。 |
借用したフッテージはキャプチャアプリのUIを引き継ぐ
納品されたカットで見つかった最悪の単一の欠陥:完成したビデオには、他の誰かの「いいね」ボタン、視聴回数カウンター、コメントバブルが含まれていました。なぜなら、ベース…
[翻訳のために切り詰められました]