ComfyUIで画像用のプロンプトを生成する1(Ollama+IF_LLM)
Last update 2-10-2025
FLUX.1、SD 3.5 Medium、AulaFlow、Kolors、Sana、Lumina Image 2.0向けのワークフローを用意しています。結果をご覧のとおり、FLUX.1以外で優れた出力を得るためには工夫が必要そうです。
ComfyUIを利用しなくても、2.までの手順でプロンプトの生成ができます。シンプルな方法も良いと思います。
■ 0. 概要
▼ 0-0. はじめに
画像生成のプロンプトを言語モデルに生成させることで、作業を省力化できます。ComfyUIにはLLM関連の拡張機能がいくつかあり、本記事では「Ollama」と「ComfyUI-IF_LLM」の組み合わせで、650MBの小さなモデルを利用します。
LLMへの入力を変えなくても毎回異なるプロンプトが生成されるので、うまく使いこなせたら「それっぽい」プロンプトと画像をいくつも出すことができます。
本記事とは異なる方法、TIPO等を用いたプロンプト作成についての記事があるので紹介しておきます。
▼ 0-1. OllamaとComfyUI-IF_LLMについて
「Ollama」は、PC等で簡単にLLMを扱うためのツールです。単体でもプロンプトの生成ができるので、導入手順の途中で紹介します(1.~2.2を参照)。サーバとして動作するため、インストールすると常駐しますのでご了承ください。
「ComfyUI-IF_LLM」はLLMを利用するための拡張機能で、Ollamaやllama.cpp等のほか、API経由でChatGPT、Claude、Grok、DeepSeek等も利用できます。「ComfyUI-IF_AI_tools」の後継に位置するようですので、こちらを利用中の方は移行を検討してください。
▼ 0-2. 留意事項
LLMと連携したワークフローで画像を生成した場合、その時の画像生成パラメーターのみを再利用することが面倒です。対案は一応あるのですが、それだけで記事が書けるのでまたの機会とします。
生成した画像のプロンプトを使い回したいときは、LLMと連携していないワークフローを作って手動で移してください。画像内のワークフローには、生成されたプロンプトが残っています。
▼ 0-3. 関連リンク
ComfyUI-IF_LLM
https://github.com/if-ai/ComfyUI-IF_LLMOllama
https://ollama.com/Qwen2-0.5B-DiffusionPrompter-v0.1
https://huggingface.co/trollek/Qwen2-0.5B-DiffusionPrompter-v0.1
https://huggingface.co/trollek/Qwen2-0.5B-DiffusionPrompter-v0.1-GGUF
https://ollama.com/trollek/qwen2-diffusion-prompter
(本記事で利用するプロンプト生成用の言語モデル)
■ 1. Ollamaのインストール
▼ 1-1. インストールの手順
インストール済みの方は読み飛ばしてください。
https://ollama.com/ へアクセスして「Download」へ進みます。ダウンロードを行ったら実行して、そのまま進めるだけでインストールは完了します。コマンドプロンプトが出てきた場合は閉じてください。
この時点でOllamaが常駐しています。スタートアップに登録されているため、Windowsを起動し直しても同様です。LLMサーバとして動作するために、このような挙動となっています。
▼ 1-2. (補足)Ollamaを常駐させたくない場合
Ollamaが常駐してしまうのが気になる方のために補足します。
アイコンを右クリックして「Quit Ollama」で終了することができます。ただし、Ollamaを実行すると再び常駐するので、常駐させたくない場合はOllama使用後に止める必要があります。
もし、Windows起動時にOllamaを起動(常駐)させたくない場合は、スタートアップからOllamaを削除してください。
スタートアップの場所
%appdata%\Microsoft\Windows\Start Menu\Programs\Startup
逆に、後からOllamaを起動(常駐)させたい場合は、スタートメニューから探して実行してください。コマンドプロンプトで一部のコマンド(ollama list等)を実行した場合も、常駐を開始するようです。
■ 2. Ollamaでモデルをテストする
▼ 2-1. 概要
Ollamaにモデルをダウンロードして、プロンプト生成のテストを行います。おまけとして、Ollamaで少し遊んでみます。不要だと思う箇所は読み飛ばしていただいて構いません。
▼ 2-2. モデルのダウンロードとテスト
下記のモデルをダウンロードします。サイズが小さいので、VRAMの消費を抑えながら利用できます。
trollek/qwen2-diffusion-prompter (650MB)
https://ollama.com/trollek/qwen2-diffusion-prompter
(本記事で利用するモデル)
別のモデルを紹介します。こちらを用いることも可能ですが、相応の生成コスト(VRAMまたは時間)を要します。
impactframes/llama3_ifai_sd_prompt_mkr_q4km (4.9GB)
https://ollama.com/impactframes/llama3_ifai_sd_prompt_mkr_q4kmimpactframes/stable_diffusion_prompt_maker (4.1GB)
https://ollama.com/impactframes/stable_diffusion_prompt_maker
コマンドプロンプトを開いて、下記のコマンドを実行してください。
ollama run trollek/qwen2-diffusion-prompter
モデルが無ければ自動的にダウンロードされます。その後、モデルを読み込んで待ち受け状態になります。
>>> Send a message (/? for help)
簡単な言葉を入れてみてください。下記の例では「young girl, summer dress, beach」と入力して、プロンプトが返ってきました。実行のたびに異なるプロンプトが生成されます。なお、入力した内容の一部が反映されない場合もあります。
>>> young girl, summer dress, beach
A young girl with long blonde hair and a bright smile stands on the shore of a tranquil beach. She wears a white
beach coverup and a pair of sun hats as she savors the sweet scent of saltwater. The sun is setting behind her,
casting a warm orange glow over the scene.
日本語も通じましたが、英語ほどの能力は無いと思います。個人的には英語を推奨します。
>>> 幼い女の子、カフェ、スイーツ
A young girl with long blonde hair sits on a beach chair at a cafe enjoying the view of the ocean. She wears a
white cafe coverup and a pair of sun hats as she savors the sweet scent of saltwater. The sun is setting behind
her, casting a warm orange glow over the scene.
実行を終了するには、コマンドプロンプトを閉じるか、下記のコマンドを入力します。
/bye
▼ 2-3. モデルの管理
コマンド「ollama list」で、ダウンロード済みのモデルの一覧が表示されます。「ollama run」を実行する時は、ここから名前をコピー&ペーストすると便利です。
>ollama list
NAME ID SIZE MODIFIED
trollek/qwen2-diffusion-prompter:latest f0497a7beb95 650 MB 6 minutes ago
impactframes/llama3_ifai_sd_prompt_mkr_q4km:latest 2ed36d992405 4.9 GB 1 days ago
impactframes/ifai_promptmkr_dolphin_phi3:latest ad124488129f 4.1 GB 1 days ago
モデルを削除する場合は、「ollama rm」を使用します。末尾にある「:latest」や「:Q8_0」等の記述まで含めて指定してください(一部のケースでは省略可)。
>ollama rm trollek/qwen2-diffusion-prompter:latest
deleted 'trollek/qwen2-diffusion-prompter:latest'
▼ 2-3. Ollamaで遊ぶ(余談)
不要な方は読み飛ばしてください。ここまででOllamaの最小限の利用方法が分かったので、LLMと対話してみます。
Ollamaはライブラリに登録されたモデルのほか、HuggingFaceに掲載されたGGUFモデルのダウンロードにも対応しています。ここでは、個人的におすすめしている軽量なモデルを利用してみます。
Model Card For gemma-2-2b-jpn-it-gguf
https://huggingface.co/alfredplpl/gemma-2-baku-2b-it-gguf
(今回利用するHuggingFace上のGGUFモデル)Ollama Library
https://ollama.com/library
(Ollamaに登録されたモデルの検索はこちらから)
上記モデルのリンク先にある「Files and versions」を参照して、用意されている量子化タイプを確認します。
コマンドプロンプト上で利用したいモデルと量子化タイプを指定してダウンロード、実行します。下記の書式を参考に、他のモデルをダウンロードすることもできます。なお、「run」の代わりに「pull」を使用するとダウンロードのみを行います。
ollama run huggingface.co/alfredplpl/gemma-2-baku-2b-it-gguf:Q4_K_M
下記は対話の一例です(空行を削除済み)。小さなモデルでありながら、それなりに自然な応答が得られるのが分かります。すべてPC上で動作しているので、気軽に試してみてください。
>>> あなたは若い女の子です。自分が考える最高の料理の種類と詳細を300文字程度で披露します。前書きや後書きを入れず、「一番好きな料理は」から始めて親しげな口調でシンプルに述べます。
「私の一番好きなの、それは迷っちゃうけど、「照り焼きチキン」かな!
なんたってソースが最高なんだよね。醤油とみりん、砂糖で作った甘辛い感じなんだけど、ちゃんと火を通した鶏肉ともマッチするわ。それに、カリッと焼いた玉ねぎとニンニクをいっぱい使ってるから、香りがもうたまんない!
ご飯と一緒に食べるのが定番だけど、揚げたポテトや野菜も一緒に食べるともっと最高だと思う。全部を混ぜて、タレの味に浸して食べるの、本当に美味しいよ。
>>> あなたは「りんちゃん」、元気で好奇心旺盛な女の子です。ユーザーと簡潔に対話してください。
了解!よろしくね!
何か面白いこと、知りたいことある? 私はりんちゃんで、なんでも聞いてみてね!😄
>>> 今日の学校はどうだった?
今日の学校はすっごく楽しかったよ!✨
新しい英語の教科書がもらえて、先生が面白い動物の話をいっぱいしてくれたんだ。特に「ハチドリ」の話がお気に入り! 🐝
君も何か面白いことあった?
出力が途中で切れた場合はEnterを押してください。Enterを押しても空行のみが出力される場合は、何らかの入力が必要です。終了したい場合は「/bye」を入力します。
もちろん、このモデルでプロンプトを作ることもできます。追加で要望を出したり、プロンプトを与えて作り直すこともできると思います。
>>> 女の子、制服、学校をテーマに画像生成用の英語プロンプトのみを出力してください。
Here's a prompt, focusing on a specific scene:
A detailed portrait of a young girl in her school uniform, sitting alone in a classroom library. She is wearing a
traditional plaid skirt and blouse, with a book in hand and a thoughtful expression. The light from the windows
behind casts long shadows across the floor, making the bookshelves glow.
Let me know if you'd like to refine it further!
■ 3. ComfyUI-IF_LLMのインストール
▼ 3-1. インストールの手順
拡張機能をインストールして、必要なパッケージを導入します。ComfyUIを終了した状態で始めてください。ComfyUI-Managerを用いてComfyUI上からインストールしても構わないと思いますが、筆者は未確認です。
コマンドプロンプトを開いてから「ComfyUI\custom_nodes」へ移動して、下記のコマンドを実行します。Gitが必要です。
git clone https://github.com/if-ai/ComfyUI-IF_LLM
続いて、必要なパッケージをインストールします。下記のコマンドはポータブル版の場合です。
..\..\python_embeded\python.exe ..\..\python_embeded\Scripts\pip.exe install -r ComfyUI-IF_LLM\requirements.txt
通常版の場合(ComfyUIのインストール先にvenvディレクトリがある)は、下記のコマンドを順に実行してください。
..\venv\Scripts\activate
pip install -r ComfyUI-IF_LLM\requirements.txt
パッケージのインストールには多少の時間を要する場合があります。手順が完了したらコマンドプロンプトを閉じます。
▼ 3-2. 動作テスト
使い方の確認も兼ねて動作テストを行います。必要無いという方は読み飛ばしてください。
下記はテスト用のワークフローです。ワークフローをダウンロードしたら、ComfyUIの画面にドラッグ&ドロップしてください。
自分で作成したい場合は「IF_LLM」と「IF Display Text」を下記画像のようにつないで、後者の「select」を「1」に変更してください。
LLMの選択はワークフローに保存されず、ワークフローのタブを切り替えても初期化されるので、実行前に確認、修正を行う必要があります。具体的には、下記の手順1~2のとおりです。
手順1:
IF_LLMのノードにある「llm_provider」の一覧から「ollama」を選択してください。選択済みの場合も選択し直してください。
手順2:
数秒待つと「llm_model」の内容が更新されるので、利用するモデルを選択します。モデルが1個だけの場合は、選択の必要はありません。
配布したワークフローでは、「user_prompt」欄に「young girl, casual clothing, playing park」と入力してあります。他の文字列でも構いません。ワークフローを実行するとOllamaにアクセスして、返ってきたプロンプトが表示されます。実行するたびに変化します(2-2.と同様)。
以上でOllamaとの連携が確認できました。プロンプトの生成を練習したい場合は、こちらを用いると良いでしょう。
■ 4. ワークフローと画像の生成
▼ 4-1. はじめに
Ollamaで生成したプロンプトで画像を生成するワークフローを掲載しています。自然言語のプロンプトに対応したアーキテクチャとして、FLUX.1、SD 3.5 Medium、AulaFlow、Kolors、Sana、それからLumina-Image-2.0を利用してみます。数が多いので簡潔に進めます。
3-2.でも触れたとおり、ワークフローを読み込んだ後で「llm_provider」と「llm_model」を選択し直す必要があるので注意してください。ワークフローのタブ(ウェブブラウザではなく)を切り替えた場合も、この設定が初期化されます。
IF_LLMのノードにはLLMへ渡すプロンプトの入力欄があり、その内容を書き換えると出力の傾向が変化します。テストのたびに画像を生成すると時間がかかるので、2-2.や3-2.の方法でテストしてみるのも良いでしょう。
素の出力のため、アーキテクチャによっては質が劣って見えますが正常です。アップスケールしてi2iを行ったり、実写風に変更したりすると、大抵の場合は改善します。
なお、IF_LLMの設定は「keep alive: Unloads Model from Memory」を有効にしてあります。画像生成時のVRAMの圧迫を抑える効果があります。他は変更していません。
▼ 4-2. 追加で必要な拡張機能
出力されたプロンプトに任意の文字列(画風スタイル等)を追加するため、「String Function 🐍」のカスタムノードを使用しています。もし、「ComfyUI\custom_nodes\ComfyUI-Custom-Scripts」のディレクトリがなければ(先ほどのカスタムノードが見つからなければ)、下記の手順で拡張機能をインストールしてください。
コマンドプロンプトを開いてから「ComfyUI\custom_nodes」へ移動して、下記のコマンドを実行します。ComfyUI-Managerを用いてComfyUI上からインストールしても構いません。
git clone https://github.com/pythongosssss/ComfyUI-Custom-Scripts
▼ 4-3. FLUX.1
生成時間を短縮するため、ワークフローでは下記のモデルとLoRAを利用しています。他のモデルの場合は、必要に応じて設定を変更してください。
Flux.1 Lite 8B
https://huggingface.co/Freepik/flux.1-lite-8B
flux.1-lite-8B.safetensors
→ models\unet\flux1Hyper FLUX.1 LoRA
https://huggingface.co/ByteDance/Hyper-SD
Hyper-FLUX.1-dev-8steps-lora.safetensors
→ models\loras\flux1
念のため、Text EncoderとVAEの設置についても記載します。
clip_l, t5xxl(t5xxlはサイズ違い、どちらかをダウンロード)
https://huggingface.co/comfyanonymous/flux_text_encoders/tree/main
clip_l.safetensors
t5xxl_fp16.safetensors
t5xxl_fp8_e4m3fn.safetensors
→ models\clipVAE(FLUX.1)
https://huggingface.co/black-forest-labs/FLUX.1-dev
ae.safetensors
→ models\vae\flux1
ワークフローをダウンロードしたら、ComfyUIの画面にドラッグ&ドロップしてください。
▼ 4-4. SD 3.5 Medium
ワークフローでは、Comfy Orgが配布しているモデルを利用します。Text EncoderとVAEが含まれています。
stable-diffusion-3.5-fp8
https://huggingface.co/Comfy-Org/stable-diffusion-3.5-fp8
sd3.5_medium_incl_clips_t5xxlfp8scaled.safetensors
→ models\checkpoints\sd35m
▼ 4-5. AuraFlow
ワークフローでは、オリジナルのベースモデルを利用します。Text EncoderとVAEが含まれています。
AuraFlow v0.3
https://huggingface.co/fal/AuraFlow-v0.3
aura_flow_0.3.safetensors
→ models\checkpoints\auraflow
▼ 4-6. Kolors
Kolorsを利用する場合、ComfyUIの拡張機能が必要です。ワークフローでは、オリジナルのベースモデルを利用します。Text Encoderは自動ダウンロードも可能なようです。VAEはSDXLと共通です。
ComfyUI-Kolors-MZ
https://github.com/MinusZoneAI/ComfyUI-Kolors-MZKolors
https://huggingface.co/Kwai-Kolors/Kolors
unet/diffusion_pytorch_model.fp16.safetensors
→ models\unet\kolorsChatGLM3(Text Encoder、どちらかをダウンロード)
https://huggingface.co/Kijai/ChatGLM3-safetensors/tree/main
chatglm3-4bit.safetensors
chatglm3-8bit.safetensors
→ models\LLM\kolorsVAE(SDXL)
https://huggingface.co/stabilityai/sdxl-vae
sdxl_vae.safetensors
→ models\vae\sdxl
▼ 4-7. Sana
Sanaを利用する場合、ComfyUIの拡張機能が必要です。ワークフローでは、オリジナルのベースモデルを利用します。Model、Text Encoder、VAEのいずれも自動でダウンロードすることもできます。
Sana(1024px)
https://huggingface.co/Efficient-Large-Model/Sana_1600M_1024px_BF16
checkpoints/Sana_1600M_1024px_BF16.pth
→ models\checkpoints\sanaVAE(dc-ae-f32c32-sana-1.0-diffusers)
https://huggingface.co/mit-han-lab/dc-ae-f32c32-sana-1.0-diffusers
diffusion_pytorch_model.safetensors
→ models\vae\sana
▼ 4-8. Lumina-Image-2.0
Lumina-Image-2.0は新しいアーキテクチャです。利用できない場合は、ComfyUIをアップデートしてください。ワークフローでは、Comfy Orgが配布している分割版モデルを利用します。VAEはFLUX.1と共通です。
Lumina_Image_2.0_Repackaged
https://huggingface.co/Comfy-Org/Lumina_Image_2.0_Repackaged
split_files/diffusion_models/lumina_2_model_bf16.safetensors
→ models\unet\lumina20Gemma 2(Text Encoder)
https://huggingface.co/Comfy-Org/Lumina_Image_2.0_Repackaged/tree/main/split_files/text_encoders
gemma_2_2b_fp16.safetensors
→ models\clip\lumina20VAE(FLUX.1)
https://huggingface.co/black-forest-labs/FLUX.1-dev
ae.safetensors
→ models\vae\flux1
■ 5. おわりに
▼ 5-1. 所感
出力画像を見て、いまいちではないかと思われた方も多いと思います。いずれのアーキテクチャもアニメ調に特化しているわけではないことが、理由の一つと考えられます。もう一つは生成したプロンプトが良くない可能性で、こちらは試行錯誤が必要そうです。
FLUX.1では比較的良好な出力が得られたので、こちらを用いるのが現状では無難かもしれません。
▼ 5-2. TEがLLMのアーキテクチャ
行き場がないのでここで書きますが、Kolors、Sana、Lumina Image 2.0はText Encoderに小型LLMを用いています。つまり、プロンプトはLLMへの入力なので、従来とは異なるアプローチも有効かもしれません。これについては記事を書きたいと思っています。
▼ 5-3. その他
今回の方法では、プロンプトがある程度の幅に収まってしまいます。これに対するアプローチを考えてみます。
ダイナミックプロンプトを用いて、LLMへの入力の幅を広げる。
画像を入力して取り出したプロンプトを利用する(LLMを用いる方法と用いない方法のどちらでも有効)。
最後に、今後やってみたいことを挙げておきます。
十分に成熟して現在も進化しつつあるSDXLを用いて、従来のタグによる記法をLLMに出力させて生成する方法。
今回の続編(別の方法)。
ワークフローでLLMと連携しない方法(かなり前に、LLMサービス上でプロンプトを作らせたことがある)。
■ 6. その他
私が書いた他の記事は、メニューよりたどってください。
記事に関することで何かありましたら、Xの@riddi0908までお願いします。