見出し画像

ComfyUIでFluxの画像生成をしてDiscord botで投稿する方法

この記事の目的

  • Discordから画像生成をする

  • 生成にはComfyUIを使う

  • Fluxを使う

DiscordボットはComfyUI-Discord-Botを使います。インストール方法は前の記事をご覧下さい。

Flux画像生成のワークフローを作る

というわけで出来たのがこちら!ドン!

ComfyUIにドロップするとワークフローが再現できます

API用のJSONを出力する

歯車から設定に入り「Dev Mode」をONにすると「Save(API Format)」というボタンが表示されます。このボタンからAPI用のワークフローJSONを保存します。

Discord botにカスタムハンドラーを追加

ここで言うハンドラーはDiscordから呼び出す機能グループと思ってください。

  1. ComfyUI-Discord-Bot/custom_handlers の中に flux というフォルダを作成

  2. fluxフォルダの中に新規テキストファイル prompts.py を作成

ComfyUI-Discord-Bot/
  +-- custom_handlers/
        +-- flux/
              +-- prompts.py

prompts.py に変数を追記し、先程保存したjsonの内容をペーストします。

FLUX_SIMPLE_PROMPT = """
{ここにペースト}
"""

最後にDiscord bot が受け取るための画像保存ノード "save_image_websocket_node" を追加します。
追加前の最後のノードの最後に「,」を追加するのを忘れずに。

FLUX_SIMPLE_PROMPT = """
{
  "6": {
    "inputs": {
      "text": [
        "40",
        0
      ],
      "clip": [
        "11",
        0
      ]
    },
    "class_type": "CLIPTextEncode",
    "_meta": {
      "title": "CLIP Text Encode (Positive Prompt)"
    }
  },
///////// 省略 /////////////
  "48": {
    "inputs": {
      "text": [
        "41",
        0
      ],
      "clip": [
        "11",
        0
      ]
    },
    "class_type": "CLIPTextEncode",
    "_meta": {
      "title": "CLIP Text Encode (Negative Prompt)"
    }
  },
  "save_image_websocket_node": {
    "inputs": {
      "images": [
        "8",
        0
      ]
    },
    "class_type": "SaveImageWebsocket",
    "_meta": {
      "title": "SaveImageWebsocket"
    }
  }
}
"""


実際に動くサンプル

というわけで実際に動くサンプルがこちらです。

ComfyUI-Discord-Bot/custom_handlers の中で

> git clone https://github.com/da2el-ai/ComfyUI-Discord-Bot-sample.git

すると使えると思います(試してません)。

サンプルの説明

FlagHandler.py

ComfyUI-Discord-Bot/handlers/handlers.py (標準のtxt2imgなどが記載されている)に記載されてるパラメーター変更のロジックを切り出したものです。

handlers.py

カスタムハンドラーの本体。
標準のtxt2imgハンドラーなどでは --res --steps --seed などでパラメーターを変更できるのですが、ユーザーからは変更不可にしたいのでごっそり削りました。

ハンドラー作成のポイント

謎の数値がハードコーディングされていますが、これらはノードIDです。

self._flags_handler.set_flags("seed", [["46", "inputs", "seed"]])

例えばseedの "46" というのはワークフロー内のKSamplerを指しています。

  "46": {
    "inputs": {
      "seed": 672655501467235,
      "steps": 4,
      "cfg": 1,
      "sampler_name": "euler",
      "scheduler": "simple",
      "denoise": 1,
      "model": [
        "44",
        0
      ],
      "positive": [
        "6",
        0
      ],
      "negative": [
        "48",
        0
      ],
      "latent_image": [
        "27",
        0
      ]
    },
    "class_type": "KSampler",
    "_meta": {
      "title": "KSampler"
    }
  },

あとは実際に触って試してください。
ワークフローを組み替えれば何でもできそうな気がします。

最後に

ComfyUI-Discord-Bot は色々できて便利ですね。

しかしDiscord botへのメッセージ受け渡しが普通のメッセージじゃなくてスラッシュコマンドだから、プロンプトを見れないのが残念です。
そこだけ変更してほしいなぁ……。


この記事が気に入ったらサポートをしてみませんか?