diff --git a/my-blog/content/posts/2025-10-19-comfyui-auto-controlnet.md b/my-blog/content/posts/2025-10-19-comfyui-auto-controlnet.md new file mode 100644 index 0000000..9016d75 --- /dev/null +++ b/my-blog/content/posts/2025-10-19-comfyui-auto-controlnet.md @@ -0,0 +1,92 @@ +--- +title: "comfyuiを自動化する" +slug: "comfyui-auto-controlnet" +date: "2025-10-19" +tags: ["comfyui"] +draft: false +--- + +今回は、使用している`comfyui`の自動化を紹介します。この辺の情報は検索してもあまり見あたりませんので。 + +## comfyuiの自動化手順 + +以下の機能を使用します。 + +1. `Apply InstantID`: 顔を指定します。 +2. `Apply ControlNet`: ポーズを指定します。 + +まずこちらのworkflowを読み込みむと処理を書くのが早くなります。workflowは通常、comfyuiで作られた画像に記録されています。 + +[https://docs.comfy.org/tutorials/controlnet/pose-controlnet-2-pass](https://docs.comfy.org/tutorials/controlnet/pose-controlnet-2-pass) + +ここから`Apply InstantID`を追加します。`Apply ControlNet`から`positive`, `negative`を`InstantID`と`KSampler`につなぎます。 + +```md +[ControlNet] -> [InstantID] -> [KSampler] +``` + +自動化には以下のノードを使います。 + +1. `Batch Image Loop Open`: loop処理を作れます。 +2. `Load Image Batch From Dir`: 画像をディレクトリから読み込みます。 +3. `LogicUtil_Uniform Random Choice`: ランダムで区切り文字を選択します。loop中にpromptの中身を変えます。 + +なお、`comfyui`の外部ノードは以下を使用しています。 + +- comfyui_instantid +- loop-image +- comfyui-inspire-pack + + +自動化の手順としては、まず、ポーズをディレクトリに保存しておき、`Load Image Batch From Dir`で読み込みます。`Batch Image Loop Open`につなぎます。それを`Apply ControlNet`につなぎます。 + +最終的に`KSampler`から`VAE Decode`をつなぎ、そこから`Batch Image Loop Close`でループを閉じます。 + +もしここで保存したければ、`VAE Decode`を`Save Image`にも繋いでおきます。 + +```md +[Load Image Batch From Dir] -> [Batch Image Loop Open] -> + +[ControlNet] -> [InstantID] -> [KSampler] -> + +[VAE Decode] -> [Batch Image Loop Close] +``` + +[![](/img/comfyui_instantid_controlnet_0001.png)](/img/comfyui_instantid_controlnet_0001.png) +[![](/img/comfyui_instantid_controlnet_0002.png)](/img/comfyui_instantid_controlnet_0002.png) +[![](/img/comfyui_instantid_controlnet_0003.png)](/img/comfyui_instantid_controlnet_0003.png) +[![](/img/comfyui_instantid_controlnet_0004.png)](/img/comfyui_instantid_controlnet_0004.png) + + +## comfyuiの便利なノード + +私は、`filename_prefix`で`Get Date Time String(JPS)`を使用しています。これでファイル名が重複しづらくなります。 + +役立つ外部ノードです。 + +- comfy-image-saver +- JPS-Nodes +- comfyui-custom-scripts + +例えば、私は、loop中にpromptをランダムで変える処理を追加しています。これは`LogicUtil_Uniform Random Choice`で実現しており、区切り文字は`,`です。 + +```md +background: city street, +background: cloud sky, +background: galaxy planet, +``` + +## ポーズの作成手順 + +私の場合、例えば、自作のゲーム動画を保存し、`ffmepg`で画像化します。 + +```sh +$ ffmpeg -i input.mp4 output%04d.png +``` + +その画像を使って、ポーズを作成することができます。 + +- `OpenPose Pose`: `comfyui_controlnet_aux` + +[![](/img/comfyui_instantid_controlnet_0005.png)](/img/comfyui_instantid_controlnet_0005.png) + diff --git a/my-blog/static/img/comfyui_instantid_controlnet_0001.png b/my-blog/static/img/comfyui_instantid_controlnet_0001.png new file mode 100644 index 0000000..acbe432 Binary files /dev/null and b/my-blog/static/img/comfyui_instantid_controlnet_0001.png differ diff --git a/my-blog/static/img/comfyui_instantid_controlnet_0002.png b/my-blog/static/img/comfyui_instantid_controlnet_0002.png new file mode 100644 index 0000000..9650056 Binary files /dev/null and b/my-blog/static/img/comfyui_instantid_controlnet_0002.png differ diff --git a/my-blog/static/img/comfyui_instantid_controlnet_0003.png b/my-blog/static/img/comfyui_instantid_controlnet_0003.png new file mode 100644 index 0000000..e465a63 Binary files /dev/null and b/my-blog/static/img/comfyui_instantid_controlnet_0003.png differ diff --git a/my-blog/static/img/comfyui_instantid_controlnet_0004.png b/my-blog/static/img/comfyui_instantid_controlnet_0004.png new file mode 100644 index 0000000..fa19091 Binary files /dev/null and b/my-blog/static/img/comfyui_instantid_controlnet_0004.png differ diff --git a/my-blog/static/img/comfyui_instantid_controlnet_0005.png b/my-blog/static/img/comfyui_instantid_controlnet_0005.png new file mode 100644 index 0000000..9c73865 Binary files /dev/null and b/my-blog/static/img/comfyui_instantid_controlnet_0005.png differ