3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ComfyUIにおいて.jpgや.webpで画像を保存する方法(メタデータの扱いも含む)

Last updated at Posted at 2024-07-06

この記事ではComfyUIで.pngの代わりに.jpgや.webpで保存する方法と、その中のワークフローを含んだメタデータの処理や移動について説明します。

尚、ここではComfyUIの基本について説明しません。既にComfyUIとComfyUI Managerをインストールしたという前提で進みます。

又、この前の記事で紹介した日本語化や日本語プロンプトを入力する方法は今回でも使うのでまずこのその記事もおすすめです。

はじめに

ComfyUIはデフォルトでは.pngしか保存できないのですがね.pngファイルサイズが大きくてあまり不便に感じますね。そこで.jpgや.webpなどで保存できたらいいと思う人も少なくないでしょう。

ただ、ComfyUIから出力した.pngファイルは生成の時に使われたワークフローの情報を含んだメタデータが埋め込まれています。だからその画像をComfyUI画面にドラッグして入れたらワークフローのロードになって生成過程を再現できるから便利です。

そしてもしComfyUIから出力した.pngファイルをそのまま.jpgや.webpに変換したらその中のメタデータが失ってしまうのです。

それに、もしComfyUIで直接.jpgや.webpを保存できたらその方が便利なはずですよね。

方法を探してみたらメタデータも埋め込む.jpgや.webpで保存する方法色々を見つけたのでここで紹介したいと思います。

使えるプラグイン

実はそのようにことができるプラグインが複数ありますよね。例えば

Extended Save Image for ComfyUI https://github.com/palant/extended-saveimage-comfyui
Save Image Extended for ComfyUI https://github.com/audioscavenger/save-image-extended-comfyui
SaveImgPrompt https://github.com/mpiquero1111/ComfyUI-SaveImgPrompt
ComfyUI Image Saver https://github.com/alexopus/ComfyUI-Image-Saver
Save Image Plus for ComfyUI https://github.com/Goktug/comfyui-saveimage-plus

どれも名前が似ていて混乱しやすいですが、別のものです。

色々試したところExtended Save Image for ComfyUIとSave Image Extended for ComfyUIがいいと思うので、ここでこの2つの使い方を説明します。

違いとしては、Extended Save Image for ComfyUIはただ.jpgと.webpで保存できるようにするだけのものであるのに対し、Save Image Extended for ComfyUIの方は色んな機能が含まれています。機能が多いと使い勝手がよくて便利かもしれませんが、ノードが必要以上に大きくて複雑なので、もしただ簡単に.jpgか.webpで保存したいだけならExtended Save Image for ComfyUIでいいと思います。

[2024/08/10補足]:
ただし私が実際に使っているのはSave Image Plus for ComfyUIの方です。これはExtended Save Image for ComfyUIとほぼ同じですが、ノードの名前が違うのでSave Image Extended for ComfyUIとの衝突が避けられるという利点があります。

プラグインのインストール

まずはインストールですが、ComfyUI Managerで簡単にできます。どれも「save image」とかで検索したら出てきます。名前が似ているので混同しやすいですね。

comfyui16.png

更にどれもSaveImageExtendedという名前のノードなので同時にインストールすることができません。どちらか選びます。

ノード追加

インストールして再起動したらSaveImageExtendedノードが追加できるようになります。

ダブルクリックで検索。
comfyui17.png

又は右クリックしてメニューから選びます。

comfyui18.png

Extended Save Image for ComfyUIの場合はこんな感じで小さいノードが出てきますね。ここで.jpgか.webpを選択できます。それだけです。

comfyui19.png

Save Image Extended for ComfyUIの場合はこのようにいっぱい出てきますね。ここで出力画像について色々設定できますが、詳しいことは割愛します。

comfyui20.png

重要なのは拡張子を選択する項目です。これで.pngと.jpgと.webpだけでなく他にも色々できますね。

comfyui21.png

使ってみる

使う時にただ元々SaveImageノードだったところをSaveImageExtendedで入れ替えるだけです。

簡単なためここではExtended Save Image for ComfyUIの方を使います。モデルはMeinaMixにします。これもよく使われているアニメ系モデルですね。

又、日本語プロンプトを入力できるようにDeepTranslatorCLIPTextEncodeNodeノード(前回の記事参考)をCLIPTextEncodeノードの代わりに使います。

comfyui22.jpg

できた画像はこれです。

ComfyUI_00053_.jpg

これ画像をダウンロードして自分のComfyUIに入れたらワークフローが出てくるはずです。

ただしExtended Save Image for ComfyUIをインストールしておいていないと開けられません。

又Extended Save Image for ComfyUIとSave Image Extended for ComfyUIではメタデータが保存される場所は違うので、Extended Save Image for ComfyUIで保存した.jpgと.webpファイルはSave Image Extended for ComfyUIをインストールしても開けられません。逆も同じです。

このように.jpgと.webpの保存は標準化されていないのでプラグインを作る人それぞれによって差があるから、読み込みも保存もプラグイン依存という状態です。

.pngならComfyUI公式からのサポートだからこのような問題はなくていいですね。

画像の中に保存されたメタデータを覗いたり.jsonとして保存したりする

ComfyUIによって出力された画像の中のメタデータは色んな方法で覗くことができます。ここではPythonのPIL(pillow)を使います。ワークフローを.jsonとして個別で保存することもできます。

コードは以下です。

from PIL import Image,PngImagePlugin
import json,os

filepath = '{{画像ファイル}}'
# pngで保存した場合
if(filepath.split('.')[-1].lower()=='png'):
    img = PngImagePlugin.PngImageFile(filepath)
    jdic = json.loads(img.info['workflow'])
# png以外の場合
else:
    img = Image.open(filepath)
    jexif = img._getexif()
    # Extended Save Image for ComfyUIで保存した場合
    if(37510 in jexif):
        jdic = json.loads(jexif[37510])['workflow']
    # Save Image Extended for ComfyUIで保存した場合
    else:
        jdic = json.loads(jexif[270][10:])
# jsonへ保存
with open(os.path.join(os.path.dirname(filepath),os.path.basename(filepath).split('.')[0]+'.json'),'w') as jf:
    json.dump(jdic,jf,indent=2,ensure_ascii=False)

pngだけはデータを保存する場所は違います。png以外はexifに保存されるということになります。Extended Save Image for ComfyUIとSave Image Extended for ComfyUIとはどれもexifに保存するが、ちょっと違うので互換性がないわけです。

pngのメタデータの扱いの参考

.pngから.jpgや.webpへ移行する

今まで.pngで保存していた画像でも今すぐ.jpgや.webpに変換することができます。

このコードを実行して全部.pngから.jpgへ変換することができます。

from PIL import Image,PngImagePlugin
import json,glob,os

folder = '{{画像が保存れされたフォルダ}}'
for f in glob.glob(os.path.join(folder,'*.png')):
    img = PngImagePlugin.PngImageFile(f)
    jdic = {k: json.loads(v) for k,v in img.info.items()}
    jexif = Image.Exif()
    jexif[37510] = json.dumps(jdic)
    img.save(f.replace('.png','.jpg'),exif=jexif.tobytes())

ただし上述も書いた通り変換したらExtended Save Image for ComfyUIをインストールしないパソコンで使えないことになります。自分だけで使う場合は問題ないはずですが、他の人に渡したい時ワークフローをロードしにくくて不便だということになりますね。

でもこれで多少ハードディスクの余裕ができるでしょう。

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?