MCPcopy
hub / github.com/crystian/ComfyUI-Crystools / buildMetadata

Function buildMetadata

nodes/image.py:432–509  ·  view source on GitHub ↗
(image_path)

Source from the content-addressed store, hash-verified

430
431
432def buildMetadata(image_path):
433 if Path(image_path).is_file() is False:
434 raise Exception(TEXTS.FILE_NOT_FOUND.value)
435
436 img = Image.open(image_path)
437
438 metadata = {}
439 prompt = {}
440
441 metadata["fileinfo"] = {
442 "filename": Path(image_path).as_posix(),
443 "resolution": f"{img.width}x{img.height}",
444 "date": str(datetime.fromtimestamp(os.path.getmtime(image_path))),
445 "size": str(get_size(image_path)),
446 }
447
448 # only for png files
449 if isinstance(img, PngImageFile):
450 metadataFromImg = img.info
451
452 # for all metadataFromImg convert to string (but not for workflow and prompt!)
453 for k, v in metadataFromImg.items():
454 # from ComfyUI
455 if k == "workflow":
456 try:
457 metadata["workflow"] = json.loads(metadataFromImg["workflow"])
458 except Exception as e:
459 logger.warn(f"Error parsing metadataFromImg 'workflow': {e}")
460
461 # from ComfyUI
462 elif k == "prompt":
463 try:
464 metadata["prompt"] = json.loads(metadataFromImg["prompt"])
465
466 # extract prompt to use on metadataFromImg
467 prompt = metadata["prompt"]
468 except Exception as e:
469 logger.warn(f"Error parsing metadataFromImg 'prompt': {e}")
470
471 else:
472 try:
473 # for all possible metadataFromImg by user
474 metadata[str(k)] = json.loads(v)
475 except Exception as e:
476 logger.debug(f"Error parsing {k} as json, trying as string: {e}")
477 try:
478 metadata[str(k)] = str(v)
479 except Exception as e:
480 logger.debug(f"Error parsing {k} it will be skipped: {e}")
481
482 if isinstance(img, JpegImageFile):
483 exif = img.getexif()
484
485 for k, v in exif.items():
486 tag = TAGS.get(k, k)
487 if v is not None:
488 metadata[str(tag)] = str(v)
489

Callers 3

executeMethod · 0.85
executeMethod · 0.85
executeMethod · 0.85

Calls 1

get_sizeFunction · 0.85

Tested by

no test coverage detected