ComfyUIワークフローの設定
Marinara Engineは、ローカルのComfyUIサーバーへ画像と動画のリクエストを送れます。ComfyUIを動かすRunPod Serverlessエンドポイントへは、画像のリクエストを送れます。ローカルの画像モデルなら、Marinara内蔵の基本ワークフローを使えます。動画と高度な画像設定では、自分で用意したAPI形式のワークフローを使います。API形式のワークフローとは、ComfyUIからJSONとしてエクスポートしたワークフローのことです。
Marinaraに貼り付けたJSONはスナップショットです。ComfyUIで開いているワークフローとリアルタイムにつながっているわけではありません。ComfyUIでワークフローを変更したら、動作を確認し、もう一度エクスポートして、Marinaraに保存されているJSONを置き換えてください。
始める前に
ComfyUIをインストールし、ワークフローに必要なチェックポイントとカスタムノードを追加して、サーバーを起動します。ローカルのアドレスは通常http://127.0.0.1:8188です。
ComfyUIを家庭内ネットワークの別のコンピューターで動かしている場合は、Marinaraから届くアドレスでサーバーが待ち受けている必要があります。画像のアカウントでは、Marinaraの.envにIMAGE_LOCAL_URLS_ENABLED=trueも必要です。サーバー設定リファレンスを参照してください。それでも接続できないときは、相手のコンピューターのファイアウォールを確認します。
ローカルの言語モデルと画像モデルは、GPUメモリーに同時に載りきらないことがあります。8 GBのカードでは特に起こりやすい問題です。Marinaraの画像キューは画像ジョブが同時に走らないようにしますが、読み込んだ2つのモデルを同じVRAMに収めることまではできません。メモリーが足りない場合は、クラウドの言語モデルを使う、ComfyUIを別のデバイスで動かす、もう一方を使う前に片方のモデルを解放する、のいずれかで対処します。
Marinaraの接続を作る
- Connections(接続)をクリックし、Add(追加)をクリックします。Add account(アカウントの追加)ウィンドウのImages & video(画像と動画)で、ローカルサーバーならComfyUI、RunPodのエンドポイントならRunPod Serverless (ComfyUI)を選びます。
- ローカルのComfyUIでは、そのアドレス(
http://127.0.0.1:8188)を入力します。APIキーは不要です。ComfyUI workflow (optional)(ComfyUIワークフロー、任意)欄が空のときは、Marinaraが内蔵の基本的なtext-to-imageワークフローを使います。 - RunPodでは、APIキーとRunPod endpoint ID(RunPodのエンドポイントID)を入力します。カスタムワークフローが必須です。
- 画像モデルでLocal image defaults(ローカル画像のデフォルト設定)を設定します。ここで指定した値が、ワークフロー内の対応するプレースホルダーに入ります。
- ワークフローを貼り付けて保存し、Test image(画像をテスト)をクリックします。
うまくいかなかった場合は、トラブルシューティングを参照してください。
ワークフローを作ってエクスポートする
- Marinara用のワークフローをComfyUIで別に作成します。
- チェックポイント、LoRA、VAE、プロンプトエンコーダー、ラテント画像や画像入力のノード、サンプラー、出力ノードを、いつもどおり設定してつなぎます。
- ComfyUIでワークフローをキューに入れ、期待どおりの画像ができることを確かめます。
- 出力ノードを必ず入れます。Marinaraは完成した画像やアニメーションをComfyUIのワークフロー履歴から読み取るため、SaveImageがもっとも安全な選択肢です。
- 編集可能なワークフローを、
Marinara_Workflowのようにすぐ見分けられる名前で保存します。 - ワークフローをAPI形式でエクスポートします。ComfyUIのフロントエンドのバージョンによって、この操作はSave (API Format)、Export (API)、Export to APIなどと表示されます。見当たらないときは、ComfyUIの開発者向けオプション(dev mode)を有効にします。
- 書き出された
.jsonファイルをテキストエディターで開きます。
API形式のワークフローは、通常のビジュアルエディターのワークフローとは別物です。トップレベルのキーがノードIDになっていて、各ノードは通常class_typeとinputsを持ちます。必ずAPI版をエクスポートしてください。エディターの見た目のレイアウトを含む通常のワークフローファイルを貼り付けてはいけません。
ComfyUIの動画ワークフロー
Images & video(画像と動画)でComfyUIのアカウントを追加し、その動画モデルを開きます。必須のComfyUI workflow (optional)(ComfyUIワークフロー、任意)欄に、API形式のワークフローを貼り付けます。WAN 2.2をはじめとするローカルの動画グラフも、同じワークフローがComfyUIで動作し、コアのSaveVideoノードなどの出力からMP4を保存できるのであれば利用できます。
動画のワークフローでは、次のプレースホルダーを引用符の中に入れて使えます。
| プレースホルダー | Marinaraが渡す値 |
%prompt% | 組み立てたシーンまたはアニメーションのプロンプト。 |
%width%, %height% | 480pは832×480、720pは1280×720。9:16では縦横が入れ替わります。 |
%seed% | 新しいランダムな32ビットのシード。 |
%length% | 16 fps換算のフレーム数で表したクリップの長さ。 |
%model% | 接続にModelが設定されている場合はその値。 |
%reference_image_name% | ComfyUIのLoadImageノード用の、アップロードした先頭フレームのファイル名。 |
Marinaraは/promptでワークフローをキューに入れ、/historyを監視して、gifsまたはimagesの出力に記載されたMP4をダウンロードします。画像から動画を作る操作では%reference_image_name%が渡されますが、テキストだけの接続テストでは渡されません。同じワークフローで両方に対応させたいときは、この入力を必須にしないでください。
ローカルのWANのレンダリングは、中位クラスのGPUだと30分を超えることがあります。ComfyUIの動画ジョブは、画像専用のCOMFYUI_GEN_TIMEOUTではなくVIDEO_GEN_TIMEOUT_MSを使います。正しいワークフローが途中で打ち切られる場合は、動画側のタイムアウトを延ばしてMarinaraを再起動します。
Marinaraのプレースホルダーを入れる
Marinaraに任せたい値を、以下のプレースホルダーに置き換えます。
ローカルのComfyUIの接続では、すべてのプレースホルダーをJSONの引用符の中に収めます。Marinaraはまずワークフローを解析し、そのあとで"%width%"のように値全体が数値のプレースホルダーを実際の数値に変換します。そのため、数値入力を要求するノードでも問題なく使えます。
RunPod Serverless (ComfyUI)の接続では、"%prompt%"、"%model%"、"%sampler%"などのテキストのプレースホルダーは引用符付きのままにし、%width%、%height%、%seed%、%steps%、%cfg%、%denoise%、%clip_skip%などの数値のプレースホルダーは引用符なしにします。RunPodでは、Marinaraがワークフローを解析するより先に置換が行われるため、挿入された数値によって送信されるJSONが正しい形になります。引用符なしのトークンは生成時まで置き換えられないので、接続の編集画面ではこのテンプレートが一時的に不正なJSONとして表示されることがあります。この警告が出ても保存はできます。
ローカル向けの基本的なAPIワークフローは、関係する部分だけを抜き出すと次のようになります。
{
"3": {
"class_type": "KSampler",
"inputs": {
"seed": "%seed%",
"steps": "%steps%",
"cfg": "%cfg%",
"sampler_name": "%sampler%",
"scheduler": "%scheduler%",
"denoise": "%denoise%"
}
},
"5": {
"class_type": "EmptyLatentImage",
"inputs": {
"width": "%width%",
"height": "%height%",
"batch_size": 1
}
},
"6": {
"class_type": "CLIPTextEncode",
"inputs": {
"text": "portrait, %prompt%, masterpiece"
}
},
"7": {
"class_type": "CLIPTextEncode",
"inputs": {
"text": "watermark, %negative_prompt%"
}
}
}これは一部分にすぎません。エクスポートしたワークフローのノードの接続やそのほかの入力はそのまま残してください。プロンプトのプレースホルダーは長い文字列の中に埋め込めるので、固定のタグを前後に付け足せます。数値のプレースホルダーは、原則として値全体にします。RunPod用にコピーしたワークフローでは、その数値トークンを囲む引用符を外します。Marinaraの接続のデフォルト設定で書き換えたくない項目は、ワークフロー側に直接値を書いたままにしておいてもかまいません。
| プレースホルダー | Marinaraが渡す値 |
%prompt% | 画像のポジティブプロンプト。これが無いと接続の編集画面が警告します。 |
%negative_prompt% | 画像のネガティブプロンプト。 |
%width%, %height% | 要求された画像のサイズ。 |
%seed% | 接続で設定したシード。-1にすると毎回ランダムなシードになります。 |
%model% | 接続に保存したモデル。ローダーノードが要求するチェックポイント名を正確に指定します。 |
%steps% | サンプリングのステップ数。 |
%cfg% | CFGスケール。%cfg_scale%と%scale%も使えます。 |
%sampler% | サンプラー名。 |
%scheduler% | スケジューラー名。 |
%denoise% | デノイズの強さ。%denoising_strength%も使えます。 |
%clip_skip% | 対応するノード向けのClip Skipの値。 |
編集が終わったらJSONを保存し、ファイル全体をコピーして、画像モデルのComfyUI workflow (optional)(ComfyUIワークフロー、任意)に貼り付けます。保存して、Test image(画像をテスト)をクリックします。
参照画像を使う
生成を開始する機能が画像を持っている場合、Marinaraは最大4枚の参照画像を渡せます。カスタムワークフロー側には、対応する入力ノードとプレースホルダーが必要です。プレースホルダーを書き足しても、ノードが自動で作られたりつながれたりはしません。
ローカルのComfyUI: LoadImageに渡すファイル名
標準的なComfyUIのLoadImageノードでは、ファイル名のプレースホルダーを使います。
{
"12": {
"class_type": "LoadImage",
"inputs": {
"image": "%reference_image_name%",
"upload": "image"
}
}
}Marinaraは参照画像をComfyUIの入力ディレクトリーにアップロードし、ComfyUIが返したファイル名でプレースホルダーを置き換えます。%reference_image_name%は1枚目の画像を指します。参照画像の入力が複数あるワークフローでは、%reference_image_name_01%から%reference_image_name_04%まで使えます。
ワークフローが常に画像入力を必要とする場合は、Local image defaults(ローカル画像のデフォルト設定)で、1x1のプレースホルダー画像をアップロードするオプションをオンにします。すると、実際の参照画像が無いリクエストのときは、Marinaraが極小のプレースホルダー画像を渡します。
base64の生データ
1枚目の画像をbase64の生データで受け取るには%reference_image%を、番号付きの入力には%reference_image_01%から%reference_image_04%を使います。これらの値にはdata:image/...の接頭辞が付かないbase64データが入るため、その形式をそのまま受け取れるカスタムノードでしか動きません。
RunPodのワークフローはbase64の生データのプレースホルダーに対応しています。ファイル名でアップロードするプレースホルダーはローカルのComfyUI専用で、RunPodのハンドラー経由では使えません。
キャラクターごとのワークフローを用意する
特定のチェックポイント、LoRAの組み合わせ、ControlNetの構成、参照画像の並びが必要なキャラクターには、そのキャラクター専用にエクスポートしたワークフローとMarinaraの画像接続を用意できます。そのキャラクターや画像機能でモデルを選べる場所では、対応する画像モデルを選びます。
汎用のワークフロー1つで済ませるより結果が安定しやすくなりますが、モデルごとにJSONのコピーを個別に持つことに変わりはありません。ComfyUIでそのキャラクターのワークフローを変更したら、その接続について、エクスポート、編集、コピー、貼り付けの手順をもう一度行ってください。
トラブルシューティング
| 問題 | 確認すること |
| ワークフローのJSONが不正だとMarinaraが表示する | ローカルのComfyUIでは、プレースホルダーを追加したあとの引用符、カンマ、括弧を確認します。RunPodでは、引用符を外してよいのは数値のプレースホルダーだけです。テキストのプレースホルダーとテンプレートの残りは、正しいJSONの書式である必要があります。 |
| プロンプトやプレースホルダーがそのままノードに届く | トークンの綴りが一覧のとおりか、貼り付けたワークフローが新しくエクスポートしたAPI版かを確かめます。 |
| 指定したサイズが画像に反映されない | 実際にサンプラーへつながっているラテント画像ノード、または同等のサイズ指定ノードに%width%と%height%を入れます。 |
| ComfyUIがモデルを見つけられない | ローダーが要求するチェックポイント名を正確に指定するか、%model%を使わずにワークフロー内へチェックポイントを直接書き込みます。 |
| ノードや入力が見つからないとComfyUIが表示する | ワークフローを作ったときと同じカスタムノードのパッケージをインストールし、入力名が変わっていないか確かめます。 |
| ジョブは完了するのにMarinaraに画像が届かない | 接続済みのSaveImage出力を追加し、ComfyUIでワークフローをもう一度直接テストします。 |
| 参照画像のノードが失敗する | 通常のローカルのLoadImageノードには%reference_image_name...%のプレースホルダーを使います。base64の生データは、それ専用のノードでのみ使い、Marinaraの機能が実際に参照画像を渡したかどうかも確認します。 |
| リモートやLANのComfyUIのURLがブロックされる | 画像の接続ではIMAGE_LOCAL_URLS_ENABLEDを有効にします。ComfyUIがネットワークインターフェイスで待ち受けるように設定し、ホストのファイアウォールも確認します。認証のないComfyUIサーバーをインターネットに公開しないでください。 |
エラー: Outbound response exceeded N bytes | 応答が設定された上限(デフォルトは30 MiB)を超えました。画像に埋め込まれたワークフローや参照画像のメタデータが原因になることがあります。ComfyUIでメタデータをオフにするか、Marinaraの.envでIMAGE_GEN_MAX_RESPONSE_BYTESを大きくしてMarinaraを再起動します。 |
| 時間のかかる画像生成がタイムアウトする | Marinaraの.envでCOMFYUI_GEN_TIMEOUTを大きくします。単位は秒で、デフォルトは2400です。 |
| 時間のかかる動画生成がタイムアウトする | Marinaraの.envでVIDEO_GEN_TIMEOUT_MSを大きくします。単位はミリ秒で、デフォルトは1800000(30分)です。 |
| 生成中にGPUメモリーが不足する | 画像のサイズやモデルのサイズを下げる、ローカルの言語モデルを解放する、リモートの言語モデルを使う、ComfyUIを別のデバイスへ移す、といった方法で対処します。 |
関連ガイド
- 画像生成プロバイダーと設定では、対応しているすべての画像サービスと共通の画像設定を説明しています。
- シーン動画の生成では、動画の接続とシーン動画に関わるすべての画面を説明しています。
- Game ModeのLTX 2.3絵コンテでは、LTX DirectorのAPIワークフロー、プレースホルダー、おすすめのGameの設定を説明しています。
- 画像スタイルプロファイルでは、Marinaraで使い回せるプロンプトのスタイルを説明しています。
- Illustratorエージェントでは、シーンの自動イラスト生成を説明しています。
- サーバー設定リファレンスでは、ローカルネットワークからのアクセスとComfyUIのタイムアウトを説明しています。
- ComfyUIのワークフローの考え方では、ComfyUIの公式ドキュメントがワークフローについて説明しています。