見出し画像

【ComfyUI】絵心がなくても絵が描ける! ローカルLLMでプロンプトを作って自動画像生成

以下の投稿の続編です。
LM Studio のローカルサーバを使って、プロンプトを作ってもらい、お好きなチェックポイントで画像を作れるComfyUIのワークフローを組みました。LM Studioの結果をプロンプトとして取り出すのに工夫した点と作成したカスタムノードについて紹介します。


LM Studioの設定

各モデルの構造化出力(Structured Output)を設定する

qwen/qwen3.5-9bとgoogle/gemma-4-e4b は、以下の内容で構造化を設定してください。

{
  "type": "object",
  "properties": {
    "prompt": {
      "type": "string",
      "description": "Main prompt (comma-separated tags)"
    },
    "negative_prompt": {
      "type": "string",
      "description": "Negative prompt"
    },
    "style": {
      "type": "string",
      "enum": [
        "anime",
        "realistic",
        "illustration"
      ]
    }
  },
  "required": [
    "prompt",
    "negative_prompt"
  ],
  "additionalProperties": false
}

構造化出力設定は以下にあります。

openai/gpt-oss-20b は、構造化出力を設定すると動きませんでした。なので、カスタムノード側でプロンプトを抜き出すようにしたので、openai/gpt-oss-20b については構造化出力は不要です。
モデルによって動きが違うんですね~。

LM Studio ローカルサーバを起動する

LM Studioの左側の `Developer`メニューから、`Status Stopped`となっているトグルボタンをONにしてローカルサーバを起動してください。
`Developer`メニューがない場合は、設定から`Developer mode` をONにしてください。

モデルをロードする

上記画面の `+ Load Model` を押すとダウンロードされているモデルの一覧が表示されるので使用するモデルを選択して、モデルをロードしてください。
ここで構造化出力が意図した設定になっているか確認してください。qwen/qwen3.5-9b やgoogle/gemma-4-e4b で構造化出力が設定されていない場合は、ここで設定してください。

ComfyUIの設定

カスタムノードのダウンロード

以下のワークフローJSONファイルをComfyUIにドロップして、ComfyUi manager の Install Missing Custom Nodes で不足ノードを取得し、ComfyUIを再起動してください。

ワークフロー概要  

ワークフロー全体

String(Multiline)
ここに「画像生成するためのプロンプトを書いて」とモデルに渡すプロンプトを書いています。構造化出力にも書いているのですが、念のため、ここでも`PROMPT: ` というキーで出すように指示しています。「テーマ」だけ伝えて、あとはモデルにいい感じでプロンプトを出すようにだけ指示しています。絵心がないので絵の内容については書いていません。

LM Studio(Text Gen)
comfyui-lmstudio-image-to-text-node のノードを使わせてもらいました。
`model_key` にモデル名を設定することで、動かすモデルを指定できます。LM Studioの以下の場所でモデル名をコピーできるので、これをそのまま貼り付ければ大丈夫です。

String Extract Prompt
今回作成したノードです。モデルからは、`PROMPT` キーに対する値として返すように構造化出力で指定したので、`json_key` で拾えばいいのですが、モデルにより様々なので、プロンプトを取り出す方法をいくつか実装しています。基本的にはすべての取り出し方を行う`auto` モードで大丈夫なはずです。
また、ネガティブプロンプトは、構造化出力でキーを指定しているので、モードを `json` にして取り出しています。

Prompt Preview
これも今回作成したノードです。このノードはプロンプト抽出の結果を表示するノードで、String Extract Prompt から受けたプロンプト、ネガティブプロンプトをそのままCLIP Text Encode(prompt)へ連携します。CLIP Text Encode(prompt)へテキストで渡してもプロンプトが表示されないので、このノードで表示しています。LM Studioから返ってきたrawデータも一緒に見れるようにしているので、ちゃんと抽出できているのかわかるようにしています。

このあとは通常の画像生成のフローです。

カスタムノードの詳しい内容は、README.md で確認してください。このカスタムノードには、Left、Mid、Right、Replace など様々な文字列加工のノードを入れています。プロンプト抽出がうまくいかない場合はこれらを利用してみてください。

最後に

今回、3つのモデルで試していますが、自分好みのものを探してみようと思います。LLMが絵の構想を考え、画像生成のチェックポイントが実際に絵を描く。ローカル・無課金なので、ただで画家を雇ってる感じですね。

いいなと思ったら応援しよう!

TakkunBlue よろしければ応援お願いします!