画像を大量に生成するとき、時間がかかるのはプロンプトを書く作業です。このワークフローは、それを見ることのできるAIに任せます。ビジョン言語モデルが各スケッチを見て記述し、新しいプロンプトを書きます。そのうえで、SDXLまたはFluxが、深度ControlNetを通してスケッチに沿った新しい画像を生成します。
すべて自分のコンピューターで、オフラインで動きます。寝る前に10枚や50枚のスケッチを渡せば、朝には数千枚の画像ができています。
ポイント
- Ollamaが言語モデルをローカルで動かし、ComfyUIはノードパックを通してそれと話します。
- モデル: 約4.7GBが最適です。LLaVA Q4が最良のプロンプトをくれました。
- 重要な設定: Fluxではkeep-aliveを0、max tokensはFluxなら512、SDXLなら77、そしてseedのランダム化。
- その後: プロンプトとスケッチの深度マップが、SDXLまたはFluxに渡されます。
LLM、MLLM、VLMを簡単に
最初のChatGPTはテキストしか受け取りませんでした。大規模言語モデル(LLM)です。ChatGPT、Gemini、Grokは今では、画像や音声なども受け取るマルチモーダルモデル(MLLM)になっています。ビジョン言語モデル(VLM)は画像とテキストを扱うタイプで、ここで必要なのは、画像を見てそれについて書けるものです。
私が知らなかったこと:LLMもVLMも、インターネット接続なしで自分のコンピューターで動かせます。
1. Ollamaをインストールする
Ollamaは、言語モデルをローカルで動かします。インストーラー(約700MB。モデル自体はもっと大きい)をダウンロードして実行し、求められたら、表示されるコマンドをコマンドプロンプトに貼り付けてセットアップを完了させます。終わると、システムトレイにOllamaのアイコンが表示されます。設定することは何もなく、ComfyUIと並んで動いていればよいだけです。
2. ノードパックをインストールする
ComfyUIのCustom Nodes Managerで「VLM」を検索すると、多くのパックが表示されます。その多くは、ComfyUIがPython 3.11から3.12に移行して以降更新されておらず、動きません。私が使った、動作する2つはこちらです。
- ComfyUI Ollama Describer:Ollamaと話すノード。
- ComfyUI LayerStyle:言語モデル用ではありませんが、ワークフローの後半で役立ちます。
両方をインストールして、ComfyUIを再起動します。
3. モデルを選ぶ
まずOllama Text Describerノードを追加します。モデル一覧には名前とサイズが表示されます。モデルはプリインストールされておらず、初めて選ぶと、システムドライブのユーザーフォルダにダウンロードされます。そのフォルダは、Ollamaの設定(トレイのアイコンをクリック)で変更できます。
知っておくべき不便が2つあります。
- ダウンロードしたモデルは、読みやすい名前で残りません。どれをすでに持っているか分からなくなるので、メモを取っておいてください。
- テキストモデルは見ることができません。 LLMはテキストしか出力しないので、画像の記述にはビジョンモデルが必要です。
試した範囲では、次のとおりです。
| モデルサイズ | 結果 |
|---|---|
| 約350MB(0.5Bパラメータ) | ほぼ使い物にならない。GPT-3より劣る |
| 約1GB | まずまずだが、今ひとつ |
| 約4.7GB | 品質とサイズの最良のバランス |
| 5GB超 | 試していません。画像モデルと並べるとVRAMを使いすぎます |
4. 画像を記述してプロンプトを書く
画像には、Ollama Image Describerノードを使います。画像を受け取り、指示に従ってテキストを出力し、それがプロンプトになります。テキストのプレビューノードを接続して、読めるようにします。
自分のスケッチの1枚を読み込み、LLaVA Q4(4ビット量子化のLLaVA)を使いました。試したモデルの中で最良のプロンプトでした。ノードには指示欄が2つあります。本当に効くのは2番目でした。私のは、おおよそ次のような内容です。この人物をこの状況で写真画像生成するためのプロンプトを作成すること、そして、一部のモデルがあちこちに付ける引用符を使わないこと。
「思考型」モデルは避けてください。プロンプトの代わりに推論(「どう答えるか考えている…」)を書き出してしまい、画像モデルに渡しても役に立ちません。
5. 重要な設定
Keep-alive。 -1はモデルをメモリに読み込んだままにし、0はプロンプトごとにアンロードします。私は通常0を使います。SDXLでVRAMが16〜24GBあるなら、読み込んだままにして1枚あたり数秒を節約できます。Fluxでは、24GBでも毎回アンロードする必要がありました。そうしないと、5GBのビジョンモデルがメモリを占有しすぎて、画像のレンダリングが止まりました。
Maximum tokens。 画像モデルに合わせます。Fluxは512ですが、SDXLは77だけで、これはテキストエンコーダーのウィンドウの大きさです。
Seed。 記述モデルのseedは自動では変わらないので、毎回同じプロンプトになってしまいます。rgthreeのSeedノードを追加して実行のたびにランダム化する設定にし、記述モデルに接続してください。これで、実行のたびに新しいプロンプトが書かれます。指示の中の設定(「特定の場所で」「このシナリオで」)と組み合わせると、各スケッチから、さまざまなアイデアが次々と生まれます。
repeat penaltyとtemperatureは、デフォルトのままにしました。十分に良いです。
6. 完全なワークフロー:スケッチから画像へ、自動で
私のPatreonにある完全版は、すべてをまとめます。
- Load Image Batchが、実行のたびにフォルダから次のスケッチを取り出します。
- Ollama Image Describerが、そのための新しいプロンプトを書きます。私のスケッチは、さまざまなポーズの別々の女性だったので、同じ指示から、それぞれに別のプロンプトが生まれました。
- プロンプトは、画像モデルのポジティブプロンプトに渡されます。
- Depth Anythingがスケッチを深度マップに変え、Apply ControlNetがそれを使ってポーズを保ちます。
- KSamplerが画像を生成します。SDXLではJuggernaut XL(約6GB)を使いました。
幅と高さは整数ノードで1回だけ設定し、リサイズ、深度マップ、キャンバスで再利用します。
Fluxでも同じワークフローで、SDXLの代わりにXLabs SamplerとFlux devを使います。Fluxはより創造的で、バリエーションも多くなりました。keep-aliveの設定を忘れないでください。
この方法の強みは規模です。10枚や50枚のスケッチを用意し、seedをランダム化して一晩動かせば、数千枚の異なる画像が得られ、そのどれもが、あなたの絵のどれかに沿っています。プロンプトを大量に供給する他の方法は、プロンプトリストと私のPrompt Cyclerノードをご覧ください。
動画版を見る (11:31)
上の内容はすべて動画でも説明しています。画面を見ながら進めたい方はこちらをどうぞ。 動画は英語です。
よくある質問
Ollamaでは、どのビジョンモデルを使うべきですか?
私のテストでは、約4.7GBのモデルが最良のバランスでした。350MBの小さなものは、ほぼ使い物にならず、1GBのモデルは悪くないものの今ひとつでした。量子化したLLaVA(Q4)が、最良のプロンプトをくれました。
プロンプトは何トークンまで使えますか?
Fluxは最大512トークンですが、SDXLは77だけです。記述モデルの最大トークン数を、画像モデルに合わせてください。
記述の後、Fluxのレンダリングが止まるのはなぜですか?
ビジョンモデルがまだVRAMに残っているためです。keep-aliveを0にして、プロンプトを書くたびにアンロードされるようにします。Fluxでは、VRAM 24GBでも両方を読み込んだままにするには足りませんでした。
毎回同じプロンプトになるのはなぜですか?
記述モデルのseedは、自動では変わりません。seedのランダマイザーノードを接続すると、実行のたびに新しいseedになり、新しいアイデアが出ます。

