mirror of
https://github.com/invoke-ai/InvokeAI
synced 2024-08-30 20:32:17 +00:00
47 lines
1.4 KiB
Python
47 lines
1.4 KiB
Python
# Copyright (c) 2023 Lincoln D. Stein and the InvokeAI Development Team
|
|
|
|
"""Very simple functions to fetch and print metadata from InvokeAI-generated images."""
|
|
|
|
import json
|
|
import sys
|
|
from pathlib import Path
|
|
from typing import Any, Dict
|
|
|
|
from PIL import Image
|
|
|
|
|
|
def get_invokeai_metadata(image_path: Path) -> Dict[str, Any]:
|
|
"""
|
|
Retrieve "invokeai_metadata" field from png image.
|
|
|
|
:param image_path: Path to the image to read metadata from.
|
|
May raise:
|
|
OSError -- image path not found
|
|
KeyError -- image doesn't contain the metadata field
|
|
"""
|
|
image: Image = Image.open(image_path)
|
|
return json.loads(image.text["invokeai_metadata"])
|
|
|
|
|
|
def print_invokeai_metadata(image_path: Path):
|
|
"""Pretty-print the metadata."""
|
|
try:
|
|
metadata = get_invokeai_metadata(image_path)
|
|
print(f"{image_path}:\n{json.dumps(metadata, sort_keys=True, indent=4)}")
|
|
except OSError:
|
|
print(f"{image_path}:\nNo file found.")
|
|
except KeyError:
|
|
print(f"{image_path}:\nNo metadata found.")
|
|
print()
|
|
|
|
|
|
def main():
|
|
"""Run the command-line utility."""
|
|
image_paths = sys.argv[1:]
|
|
if not image_paths:
|
|
print(f"Usage: {Path(sys.argv[0]).name} image1 image2 image3 ...")
|
|
print("\nPretty-print InvokeAI image metadata from the listed png files.")
|
|
sys.exit(-1)
|
|
for img in image_paths:
|
|
print_invokeai_metadata(img)
|