Comfyのメタデータ処理
Comfyのメタデータ処理
nodes.pyにある
code:python
metadata = PngInfo()
if prompt is not None:
metadata.add_text("prompt", json.dumps(prompt))
if extra_pnginfo is not None:
for x in extra_pnginfo:
metadata.add_text(x, json.dumps(extra_pnginfox)) PIL.PngImagePlugin.PngInfo()を使ってメタデータを読み書きする
リファレンスはこれ
メタデータは少なくとも以下に相当するプロパティを見ればOK
prompt
extra_pnginfo(総称)
workflow: xxxなどのプロパティが入る
extra_pnginfoに相当するパラメータの数は可変
もし何か他のフォーマットに移植する場合は取りこぼしがないようにしたい
どうやって判断する?
双方で同じ値を持つノードが保存される場合もあるみたい
prompt
... is the complete prompt sent by the client to the server. See the prompt object for a full description.
extra_pnginfo
... is a dictionary that will be copied into the metadata of any .png files saved. Custom nodes can store additional information in this dictionary for saving (or as a way to communicate with a downstream node).
code:sh
cat ComfyUI_00043_.png | exiftool - -b -workflow | jq -C | less -R
code:sh
cat ComfyUI_00043_.png | exiftool - -b -workflow | jq -C | less -R
見た感じComfy本体ではPNG以外以外の保存形式には対応していない
Save image with generation metadata on ComfyUI
これの処理も追う
code:python
if extension == 'png':
metadata = PngInfo()
metadata.add_text("parameters", comment)
if prompt is not None:
metadata.add_text("prompt", json.dumps(prompt))
if extra_pnginfo is not None:
for x in extra_pnginfo:
metadata.add_text(x, json.dumps(extra_pnginfox)) filename = f"{filename_prefix}.png"
img.save(os.path.join(output_path, filename), pnginfo=metadata, optimize=True)
else:
filename = f"{filename_prefix}.{extension}"
file = os.path.join(output_path, filename)
img.save(file, optimize=True, quality=quality_jpeg_or_webp, lossless=lossless_webp)
exif_bytes = piexif.dump({
"Exif": {
piexif.ExifIFD.UserComment: piexif.helper.UserComment.dump(comment, encoding="unicode")
},
})
piexif.insert(exif_bytes, file)
code:python
comment = f"{handle_whitespace(positive)}\nNegative prompt: {handle_whitespace(negative)}\nSteps: {steps}, Sampler: {sampler_name}{f'_{scheduler}' if scheduler != 'normal' else ''}, CFG Scale: {cfg}, Seed: {seed_value}, Size: {width}x{height}, Model hash: {modelhash}, Model: {basemodelname}, Version: ComfyUI"
追加のパラメーターにcommentがある
save_files()から渡される
見た感じPNGではparameters: <comment>に、そうでない形式の場合はExifに突っ込んでいる とくにWebPでは