テイストアプリケーション は何をしますか?
パイプラインの後半部分です。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つ分の差は明示的に警告されます。
正確な再生時間モードは提供されていません。正確な実行時間が必要な場合は、
レシートを検査し、納品前にカットを修正または却下してください。
パイプラインは、編集可能な 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ショットにつき1回の生成です。 それは経済的に不合理です。平均 0.78 秒/ショットの参照を、4秒フロアのエンドポイントに対して 使用すると、10秒の作品が12回の呼び出し、10秒使用のために48秒生成(21% 効率) となり、 連続して見えるべき12の無関係なクリップを継ぎ接ぎすることになります。
編集者は長めのテイクを撮り、その中でカットします。ショットを約5秒のテイクにグループ化: 3回の呼び出し、13秒生成、77% 効率、そして同じ生成から得られたため、 互いに実際に属する連続したショットが得られます。
必要な形状をモデルに伝えないと、スローでロックされたプッシュがレンダリングされ、 その中の6回のカットは吃音として読み取れます:
「内部にハードカットのない、単一の連続テイクとして撮影。 編集で約0.8秒の6つの部分にカットされるため、フレーミング、被写体、照明は 全体を通して変化し続ける必要があります。任意の0.8秒のウィンドウが、 それ自体のショットとして独立して成立する必要があります。」
カットルール
- 再エンコード必須。ストリームコピー禁止。 ストリームコピーはキーフレームでのみカットします。 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は最初/中間/最後のみ提供 | 任意のタイムスタンプはありません。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 <name> --from-stills 4 --retopo --render
python mint3d.py --genre <name> --prompt "a cracked chrome visor" --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を位置ではなくキーで指定します。
応答には
thumbnailPNG とmodel_urlsブロックがmodel_glbと共に含まれます。 最初の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 <name> --refs a.mov b.mov \
--brief "what happens" --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を引き継ぐ
納品されたカットで見つかった最悪の欠陥:完成した動画が、他の誰かの「いいね」ボタン、 ビューカウンター、コメントバブルをそのまま表示していた。なぜならベース
…(省略)