| 430 | |
| 431 | |
| 432 | def 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 | |