a library to read metadata from images created by Stable Diffusion
Project description
Features
Supports reading metadata from images generated with:
- Automatic1111's Stable Diffusion web UI
- ComfyUI *
- Fooocus
- InvokeAI
- NovelAI
Provides a list of prompts used in the generation of the image, as well as generator-specific metadata.
* Custom ComfyUI nodes might parse incorrectly / with incomplete data.
Installation
pip install sd-parsers
Usage
From command line: python3 -m sd_parsers <filenames>
.
Basic usage:
For a simple query, import ParserManager
from sd_parsers
and use its parse()
method to parse an image. (see examples)
Read prompt information from a given filename with parse()
:
from sd_parsers import ParserManager
parser_manager = ParserManager()
def main():
prompt_info = parser_manager.parse("image.png")
if prompt_info:
for prompt in prompt_info.prompts:
print(f"Prompt: {prompt.value}")
Read prompt information from an already opened image:
from PIL import Image
from sd_parsers import ParserManager
parser_manager = ParserManager()
def main():
with Image.open('image.png') as image:
prompt_info = parser_manager.parse(image)
Read raw parameter data from a given filename with read_parameters()
:
from sd_parsers import ParserManager
parser_manager = ParserManager()
def main():
params = parser_manager.read_parameters("image.png")
if params is None:
return
image_generator, metadata = params
...
[!IMPORTANT]
As a larger portion of the metadata validation is performed during the 'parsing'-operation, this method is more prone to returning false positives. As such, either a more strict control of input images or additional subsequent validation is advised.
Each parser module can also be used directly, omitting the use of ParserManager
:
from PIL import Image
from sd_parsers.data import PromptInfo
from sd_parsers.exceptions import ParserError
from sd_parsers.parsers import AUTOMATIC1111Parser
parser = AUTOMATIC1111Parser()
def main():
try:
with Image.open("image.png") as image:
# read_parameters() returns relevant image metadata parameters
# and optional context information needed for parsing
parameters, parsing_context = parser.read_parameters(image)
# parse() builds a standardized data structure from the raw parameters
samplers, metadata = parser.parse(parameters, parsing_context)
except ParserError:
...
# creating a PromptInfo object from the obtained data allows for the use
# of convenience poperties like ".prompts" or ".models"
prompt_info = PromptInfo(parser, samplers, metadata)
Output
The output returned from ParserManager
is a PromptInfo
object (as can be seen when executing python3 -m sd_parsers <image.png>
) or None
if no metadata was found.
PromptInfo
contains the following properties :
-
generator
: Specifies the image generator that may have been used for creating the image. -
full_prompt
: A full prompt if present in the image metadata.Otherwise, a simple concatenation of all prompts found.
-
full_negative_prompt
: A full negative prompt if present in the image metadata.Otherwise, a simple concatenation of all negative prompts found.
-
prompts
: All prompts found in the parsed metadata. -
negative_prompts
: All negative prompts found in the parsed metadata. -
models
: Models used in the image generation process. -
samplers
: Samplers used in the image generation process.Samplers act as the central data autorithy (see PromptInfo).
A Sampler contains the following properties specific to itself:
sampler_id
: A unique id of the sampler (if present in the metadata)name
: The name of the samplerparameters
: Generation parameters, including cfg_scale, seed, steps and others.model
: The model used by this sampler.prompts
: A list of positive prompts used by this sampler.negative_prompts
: A list of negative prompts used by this sampler.
-
metadata
: Additional metadata which could not be attributed to one of the former described.Highly dependent on the provided data structure of the respective image generator.
Contributing
As i don't have the time and resources to keep up with all the available AI-based image generators out there, the scale and features of this library is depending greatly on your help.
If you find the sd-parsers library unable to read metadata from an image, feel free to open an issue.
See CONTRIBUTING.md, if you are willing to help with improving the library itself and/or to create/maintain an additional parser module.
Credits
Idea and motivation using AUTOMATIC1111's stable diffusion webui
Example workflows for testing the ComfyUI parser
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file sd_parsers-0.4.tar.gz
.
File metadata
- Download URL: sd_parsers-0.4.tar.gz
- Upload date:
- Size: 45.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.12.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8e870e12e0fb16e5c32925ab1ea7466ef4217f270d75b2049bf1c3469d02be47 |
|
MD5 | 8cf29c9a12fdeff03a7dfe9d35bb8342 |
|
BLAKE2b-256 | f0eb9112579d6d82e92a0746caead301696506089d0a55569bc14e857dd8c05e |
File details
Details for the file sd_parsers-0.4-py3-none-any.whl
.
File metadata
- Download URL: sd_parsers-0.4-py3-none-any.whl
- Upload date:
- Size: 23.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.12.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6f4c888ff21335cc650e77373e8a52a2568a7fd09584742d78098f037ede510a |
|
MD5 | e4270f31975851138a9a0d3fce0ac354 |
|
BLAKE2b-256 | 61f7ff5fc517d043b5425fd25772bb3a196fedcd119c4cc2d7779ec6bf1a6d31 |