Skip to content

Commit

Permalink
update tests
Browse files Browse the repository at this point in the history
  • Loading branch information
d3x-at committed Oct 22, 2023
1 parent a68393d commit 07ce455
Show file tree
Hide file tree
Showing 8 changed files with 454 additions and 232 deletions.
Empty file.
67 changes: 67 additions & 0 deletions tests/resources/parsers/ComfyUI/img2img_cropped.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
import pytest

from src.sd_parsers.parser_base import Model, Prompt, Sampler

MODEL = Model(name="v1-5-pruned-emaonly.ckpt", config="v1-inference.yaml", model_id=4)
PROMPTS = [
Prompt(
value="photograph of victorian woman with wings, sky clouds, " "meadow grass",
prompt_id=6,
)
]
NEGATIVE_PROMPTS = [Prompt(value="watermark, text", prompt_id=7)]

PARAM = pytest.param(
"img2img_cropped.png",
(
[
Sampler(
name="sample_dpmpp_2m",
parameters={
"seed": 280823642470253,
"random_seed_after_every_gen": True,
"steps": 20,
"cfg": 8.0,
"scheduler": "normal",
"denoise": 0.8700000000000001,
},
sampler_id=3,
model=MODEL,
prompts=PROMPTS,
negative_prompts=NEGATIVE_PROMPTS,
),
],
set([MODEL]),
set(PROMPTS),
set(NEGATIVE_PROMPTS),
{
("SaveImage", 9): {"filename_prefix": "ComfyUI"},
("LoadImage", 10): {"image": "example.png"},
},
),
id="img2img_cropped.png",
)

[
Sampler(
name="sample_dpmpp_2m",
parameters={
"seed": 280823642470253,
"random_seed_after_every_gen": True,
"scheduler": "normal",
"denoise": 0.8700000000000001,
},
sampler_id=3,
model=Model(
model_id=4, name="v1-5-pruned-emaonly.ckpt", config="v1-inference.yaml", model_hash=None
),
prompts=[
Prompt(
value="photograph of victorian woman with wings, sky clouds, meadow grass",
prompt_id=6,
weight=None,
)
],
negative_prompts=[Prompt(value="watermark, text", prompt_id=7, weight=None)],
)
]
169 changes: 169 additions & 0 deletions tests/resources/parsers/ComfyUI/night_evening_day_morning_cropped.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,169 @@
import pytest

from src.sd_parsers.parser_base import Model, Prompt, Sampler

MODEL1 = Model(model_id=45, name="Anything-V3.0.ckpt", config=None, model_hash=None)
MODEL2 = Model(
model_id=46,
name="AbyssOrangeMix2_hard.safetensors",
config=None,
model_hash=None,
)

PROMPTS1 = [
Prompt(
value="(best quality) (daytime:1.2) sky (blue)",
prompt_id=17,
weight=None,
),
Prompt(
value="(best quality) (night:1.3) (darkness) sky (black) (stars:1.2) "
"(galaxy:1.2) (space) (universe)",
prompt_id=14,
weight=None,
),
Prompt(
value="(best quality) (evening:1.2) (sky:1.2) (clouds) (colorful) "
"(HDR:1.2) (sunset:1.3)",
prompt_id=13,
weight=None,
),
Prompt(
value="(masterpiece) (best quality) morning sky",
prompt_id=33,
weight=None,
),
Prompt(
value="(masterpiece) (best quality) beautiful landscape breathtaking "
"amazing view nature photograph forest mountains ocean (sky) "
"national park scenery",
prompt_id=6,
weight=None,
),
]

NEGATIVE_PROMPTS1 = [
Prompt(
value="(hands), text, error, cropped, (worst "
"quality:1.2), (low quality:1.2), "
"normal quality, (jpeg artifacts:1.3), "
"signature, watermark, username, "
"blurry, artist name, monochrome, "
"sketch, censorship, censor, "
"(copyright:1.2), extra legs, "
"(forehead mark) (depth of field) "
"(emotionless) (penis) (pumpkin)",
prompt_id=7,
weight=None,
)
]

PROMPTS2 = [
Prompt(
value="(best quality) beautiful (HDR:1.2) "
"(realistic:1.2) landscape breathtaking amazing "
"view nature scenery photograph forest "
"mountains ocean daytime night evening morning, "
"(sky:1.2)",
prompt_id=26,
weight=None,
)
]

NEGATIVE_PROMPTS2 = [
Prompt(
value="(hands), text, error, cropped, (worst "
"quality:1.2), (low quality:1.2), "
"normal quality, (jpeg artifacts:1.3), "
"signature, watermark, username, "
"blurry, artist name, monochrome, "
"sketch, censorship, censor, "
"(copyright:1.2), extra legs, "
"(forehead mark) (depth of field) "
"(emotionless) (penis) (pumpkin)",
prompt_id=27,
weight=None,
)
]

PARAM = pytest.param(
"night_evening_day_morning_cropped.png",
(
[
Sampler(
name="dpmpp_sde",
parameters={
"cfg": 8.5,
"denoise": 1.0,
"scheduler": "normal",
"seed": 335608130539327,
"steps": 13,
},
sampler_id=3,
model=MODEL1,
prompts=PROMPTS1,
negative_prompts=NEGATIVE_PROMPTS1,
),
Sampler(
name="dpmpp_2m",
parameters={
"cfg": 7.0,
"denoise": 0.5,
"scheduler": "simple",
"seed": 1122440447966177,
"steps": 14,
},
sampler_id=24,
model=MODEL2,
prompts=PROMPTS2,
negative_prompts=NEGATIVE_PROMPTS2,
),
],
set([MODEL1, MODEL2]),
set(PROMPTS1 + PROMPTS2),
set(NEGATIVE_PROMPTS1 + NEGATIVE_PROMPTS2),
{
("EmptyLatentImage", 5): {"width": 704, "height": 1280, "batch_size": 1},
("SaveImage", 9): {"filename_prefix": "ComfyUI"},
("ConditioningSetArea", 11): {
"width": 704,
"height": 384,
"x": 0,
"y": 512,
"strength": 1.0,
},
("ConditioningSetArea", 15): {
"width": 704,
"height": 384,
"x": 0,
"y": 704,
"strength": 1.0,
},
("ConditioningSetArea", 18): {
"width": 704,
"height": 384,
"x": 0,
"y": 320,
"strength": 1.0,
},
("VAELoader", 20): {"vae_name": "vae-ft-mse-840000-ema-pruned.safetensors"},
("LatentUpscale", 22): {
"upscale_method": "nearest-exact",
"width": 1088,
"height": 1920,
"crop": "disabled",
},
("SaveImage", 32): {"filename_prefix": "ComfyUI"},
("ConditioningSetArea", 34): {
"width": 704,
"height": 384,
"x": 0,
"y": 0,
"strength": 1.2000000000000002,
},
("CLIPSetLastLayer", 44): {"stop_at_clip_layer": -2},
("CLIPSetLastLayer", 47): {"stop_at_clip_layer": -2},
},
),
id="night_evening_day_morning_cropped.png",
)
99 changes: 60 additions & 39 deletions tests/test_automatic1111.py
Original file line number Diff line number Diff line change
@@ -1,57 +1,78 @@
import pytest
from PIL import Image
from sd_parsers.parser_base import Model, Prompt, Sampler
from sd_parsers.parsers import AUTOMATIC1111Parser, automatic1111

from src.sd_parsers.parser_base import Model, Prompt, Sampler
from src.sd_parsers.parsers import AUTOMATIC1111Parser, automatic1111
from tests.tools import RESOURCE_PATH

OUTPUT_MODEL = Model(name="realistic_realisticVisionV20_v20", model_hash="c0d1994c73")
OUTPUT_PROMPT_POSITIVE = Prompt(value="photo of a duck")
OUTPUT_PROMPT_NEGATIVE = Prompt(value="monochrome")
PARAMETERS = (
"photo of a duck\nNegative prompt: monochrome\n"
"Steps: 15, Sampler: UniPC, CFG scale: 5, Seed: 235284042, Size: 512x400, "
"Model hash: c0d1994c73, Model: realistic_realisticVisionV20_v20"
)

OUTPUT_SAMPLERS = [
Sampler(
name="UniPC",
parameters={"steps": "15", "cfg_scale": "5", "seed": "235284042"},
model=OUTPUT_MODEL,
prompts=[OUTPUT_PROMPT_POSITIVE],
negative_prompts=[OUTPUT_PROMPT_NEGATIVE],
)
MODEL = Model(name="realistic_realisticVisionV20_v20", model_hash="c0d1994c73")
PROMPTS = [Prompt(value="photo of a duck")]
NEGATIVE_PROMPTS = [Prompt(value="monochrome")]

SAMPLER = Sampler(
name="UniPC",
parameters={"steps": "15", "cfg_scale": "5", "seed": "235284042"},
model=MODEL,
prompts=PROMPTS,
negative_prompts=NEGATIVE_PROMPTS,
)

testdata = [
pytest.param(
"automatic1111_cropped.png",
(
SAMPLER,
set([MODEL]),
set(PROMPTS),
set(NEGATIVE_PROMPTS),
{"size": "512x400"},
),
id="automatic1111_cropped.png",
),
pytest.param(
"automatic1111_cropped.jpg",
(
SAMPLER,
set([MODEL]),
set(PROMPTS),
set(NEGATIVE_PROMPTS),
{"size": "512x400"},
),
id="automatic1111_cropped.jpg",
),
]

OUTPUT_RAW = {
"parameters": (
"photo of a duck\nNegative prompt: monochrome\n"
"Steps: 15, Sampler: UniPC, CFG scale: 5, Seed: 235284042, Size: 512x400, "
"Model hash: c0d1994c73, Model: realistic_realisticVisionV20_v20"
)
}

@pytest.mark.parametrize("filename, expected", testdata)
def test_parse(filename: str, expected):
(
expected_sampler,
expected_models,
expected_prompts,
expected_negative_prompts,
expected_metadata,
) = expected

def parse_image(filename: str):
parser = AUTOMATIC1111Parser()
with Image.open(RESOURCE_PATH / "parsers/AUTOMATIC1111" / filename) as image:
return parser.read_parameters(image)


def test_parse_png():
prompt_info = parse_image("automatic1111_cropped.png")
assert prompt_info is not None
assert prompt_info.parameters == OUTPUT_RAW
assert prompt_info.samplers == OUTPUT_SAMPLERS
assert prompt_info.prompts == [OUTPUT_PROMPT_POSITIVE]
assert prompt_info.negative_prompts == [OUTPUT_PROMPT_NEGATIVE]
assert prompt_info.models == [OUTPUT_MODEL]

image_data = parser.read_parameters(image)

def test_parse_jpg():
prompt_info = parse_image("automatic1111_cropped.jpg")
assert prompt_info is not None
assert prompt_info.parameters == OUTPUT_RAW
assert prompt_info.samplers == OUTPUT_SAMPLERS
assert image_data is not None
assert image_data.samplers == [expected_sampler]
assert image_data.prompts == expected_prompts
assert image_data.negative_prompts == expected_negative_prompts
assert image_data.models == expected_models
assert image_data.metadata == expected_metadata


def test_civitai_hashes():
parameters = OUTPUT_RAW["parameters"] + ', Hashes: {"vae": "c6a580b13a", "model": "c0d1994c73"}'
parameters = PARAMETERS + ', Hashes: {"vae": "c6a580b13a", "model": "c0d1994c73"}'

prompt, negative_prompt, metadata = automatic1111.split_parameters(parameters)
assert prompt == "photo of a duck"
Expand Down
Loading

0 comments on commit 07ce455

Please sign in to comment.