2023-12-23

【ComfyUI基礎シリーズ#2】ComfyUIでimg2imgどうやる?

テキストから画像ではなく、画像から画像を生成する方法を紹介!

Article Image

意外にわからないi2iのやり方

Stable Diffusion WebUIならタブを切り替えで出来るi2i(画像を入力してAI画像を出力)

何気にComfyUIでi2iのやり方を調べてもなかなかヒットしない。

というわけで今回は極めてシンプルなi2iのやり方を解説する。

前回のノード

前回解説した最もシンプルに画像を生成するワークフローをベースに改造していく。

ノード全体

【ComfyUI基礎シリーズ #1 】初めてのComfyUI!画像を1枚生成するまで! | 謎の技術研究部

latent imageがキャンバス

前回の記事ではKSamplerに入力しているlatent imageがAIのキャンバスだと解説した。

latentイメージのイメージ

実はめちゃくちゃシンプルな話でここに元画像を入力してやればi2iを行ってくれる

画像を読み込むノード

右クリックのメニューか何もないところをダブルクリックでノード検索からノードを追加する。

  • image > Load Image
  • 検索名:LoadImage

Load Imageの外観

choose file to uploadを押すか、上のimageと書いてある設定欄をクリックすると過去に使った画像の履歴からでも元画像を読み込める。

このノードの出力はimageであることに注意

imageの出力ピンは人間が認識できる画像データそのままでありAIには渡せないことは前回解説した。

imageはksamplerに繋げない

したがってこれをlatent imageに変換して渡してやる必要がある。

VAE Encodeノード

まず前回のおさらい。

KSamplerから出る画像はLatent Imageなので、これを人間が認識できるようにデコードした。

このときに使ったのがVAE Decodeノード

VAE Decode

今回のi2iではこの逆を行えば良い。

デコードの逆はエンコードなので

VAE Decode

  • latent > VAE Encode
  • 検索:VAEEncode

コレで良いのだが、一つ足りないのにお気づきだろうか。

エンコードするためのvaeが必要だ。

これは前回と同様Load Checkpointから出ているものを使おう

vaeを入力

ひとまず最小限で完成

たったこれだけで最小構成は完成した。

完成ノード

入力画像 出力画像
入力画像 出力画像

Tips:KSamplerのdenoise

i2iを行うときはKSamplerdenoise値を下げよう。

これを1.0のままで生成すると全く関係ない画像が生成されるが、下げていくほど元画像に忠実な絵になっていく。

0.6以下がおすすめ。0.3ぐらいまで下げる人もいるので参考まで。

Denoising

denoise 1.0 denoise 0.6
denoise1.0 denoise0.6

画像サイズを変えよう

気づいた人もいるかもしれないが、これだと元画像が大きいと処理時間がとてつもないことになってしまう(元画像と同じサイズの画像が生成されるため)

倍率でサイズを変更したい場合は次のノードを使う。

  • image > Upscale Image By
  • 検索名:ImageScaleBy

小数点以下でも使用可能。

もしくは絶対値で画像サイズを指定したい場合のノードも紹介する。

  • image > Upscale Image
  • 検索名:ImageScale (検索名とノード名が違うので注意)

ノード外観

このノードをVAE Encodeとの間に挟もう。

upscale_methodとは?

このノードではアップスケールのアルゴリズムを変えられる。

この設定は非常に細かい違いなのでここをこだわってもあまり変化はないと思われる。

一般的にlanczosが良く使われていると思うので気になったらコレに変えてみるのもよいかもしれない。

おまけ:拡大して生成

本日使っている元画像は横768pxめ比較的小さい画像だ。

そこでこれをUpscale Image Byで2倍にして生成したデータが次。

upscale後

いくらか書き込みが向上した。



この記事をシェア


謎の技術研究部 (謎技研)