309 lines
11 KiB
TypeScript
309 lines
11 KiB
TypeScript
import convertA1111ToStdPrompt from "$lib/convertA1111ToStdPrompt";
|
|
import { expect } from 'vitest';
|
|
import UnitTest from "./UnitTest";
|
|
import type { A1111ParsedInfotext } from "$lib/parseA1111";
|
|
import ComfyBoxStdPrompt from "$lib/ComfyBoxStdPrompt";
|
|
|
|
export default class convertA1111ToStdPromptTests extends UnitTest {
|
|
test__convertsBasic() {
|
|
const infotext: A1111ParsedInfotext = {
|
|
positive: "highest quality, masterpiece, best quality, masterpiece, asuka langley sitting cross legged on a chair",
|
|
negative: "lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts,signature, watermark, username, blurry, artist name",
|
|
height: 512,
|
|
width: 512,
|
|
modelHash: "925997e9",
|
|
cfgScale: 12,
|
|
sampler: "Euler",
|
|
seed: 2870305590,
|
|
steps: 28,
|
|
extraNetworks: {},
|
|
extraParams: {
|
|
"clip skip": "2",
|
|
"aesthetic embedding": "Belle",
|
|
"aesthetic lr": "0.0005",
|
|
"aesthetic slerp": "False",
|
|
"aesthetic slerp angle": "0.1",
|
|
"aesthetic steps": "15",
|
|
"aesthetic text": "",
|
|
"aesthetic text negative": "False",
|
|
"aesthetic weight": "0.9",
|
|
},
|
|
}
|
|
|
|
const converted = convertA1111ToStdPrompt(infotext);
|
|
|
|
expect(converted).toEqual({
|
|
version: 1,
|
|
metadata: {
|
|
created_with: "stable-diffusion-webui",
|
|
extra_data: {}
|
|
},
|
|
parameters: {
|
|
checkpoint: [{
|
|
model_hashes: {
|
|
a1111_shorthash: "925997e9",
|
|
}
|
|
}],
|
|
conditioning: [{
|
|
"$meta": {
|
|
types: ["positive"]
|
|
},
|
|
text: "highest quality, masterpiece, best quality, masterpiece, asuka langley sitting cross legged on a chair",
|
|
}, {
|
|
"$meta": {
|
|
types: ["negative"]
|
|
},
|
|
text: "lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts,signature, watermark, username, blurry, artist name"
|
|
}],
|
|
clip: [{
|
|
clip_skip: 2,
|
|
}],
|
|
k_sampler: [{
|
|
cfg_scale: 12,
|
|
denoise: 1,
|
|
sampler_name: "euler",
|
|
scheduler: "normal",
|
|
seed: 2870305590,
|
|
steps: 28
|
|
}],
|
|
latent_image: [{
|
|
width: 512,
|
|
height: 512,
|
|
}],
|
|
aesthetic_embedding: [{
|
|
lr: 0.0005,
|
|
model_name: "Belle",
|
|
text: "",
|
|
text_negative: false,
|
|
slerp: false,
|
|
slerp_angle: 0.1,
|
|
steps: 15,
|
|
weight: 0.9
|
|
}]
|
|
}
|
|
})
|
|
|
|
expect(() => ComfyBoxStdPrompt.parse(converted)).not.toThrow();
|
|
}
|
|
|
|
test__convertsExtraNetworks() {
|
|
const infotext: A1111ParsedInfotext = {
|
|
positive: "dreamlike fantasy landscape where everything is a shade of pink,\n dog ",
|
|
negative: "(worst quality:1.4), (low quality:1.4) , (monochrome:1.1)",
|
|
width: 640,
|
|
height: 512,
|
|
modelHash: "0f0eaaa61e",
|
|
modelName: "pastelmix-better-vae-fp16",
|
|
cfgScale: 12,
|
|
sampler: "DPM++ 2M Karras",
|
|
seed: 2416682767,
|
|
steps: 40,
|
|
denoise: 0.55,
|
|
extraNetworks: {
|
|
hypernet: [
|
|
{ items: ["zxcfc", "0.5", "baz", "quux"], },
|
|
],
|
|
lora: [
|
|
{ items: ["asdfg", "0.8", "foo", "bar"] },
|
|
],
|
|
},
|
|
extraParams: {
|
|
"clip skip": "2",
|
|
"ensd": "31337",
|
|
"hires steps": "20",
|
|
"hires upscale": "2",
|
|
"hires upscaler": "Latent",
|
|
},
|
|
}
|
|
|
|
const converted = convertA1111ToStdPrompt(infotext);
|
|
|
|
expect(converted).toEqual({
|
|
version: 1,
|
|
metadata: {
|
|
created_with: "stable-diffusion-webui",
|
|
extra_data: {
|
|
a1111: {
|
|
params: {
|
|
"ensd": "31337"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
parameters: {
|
|
checkpoint: [{
|
|
model_name: "pastelmix-better-vae-fp16",
|
|
model_hashes: {
|
|
a1111_shorthash: "0f0eaaa61e",
|
|
}
|
|
}],
|
|
conditioning: [{
|
|
"$meta": {
|
|
types: ["positive"]
|
|
},
|
|
text: "dreamlike fantasy landscape where everything is a shade of pink,\n dog ",
|
|
}, {
|
|
"$meta": {
|
|
types: ["negative"]
|
|
},
|
|
text: "(worst quality:1.4), (low quality:1.4) , (monochrome:1.1)"
|
|
}],
|
|
clip: [{
|
|
clip_skip: 2,
|
|
}],
|
|
hypernetwork: [{
|
|
model_name: "zxcfc",
|
|
strength: 0.5,
|
|
}],
|
|
lora: [{
|
|
model_name: "asdfg",
|
|
module_name: "lora",
|
|
strength_unet: 0.8,
|
|
strength_tenc: 0.8,
|
|
}],
|
|
k_sampler: [{
|
|
cfg_scale: 12,
|
|
denoise: 1,
|
|
sampler_name: "dpmpp_2m",
|
|
scheduler: "karras",
|
|
seed: 2416682767,
|
|
steps: 40
|
|
}, {
|
|
"$meta": {
|
|
types: ["upscale"]
|
|
},
|
|
cfg_scale: 12,
|
|
denoise: 0.55,
|
|
sampler_name: "dpmpp_2m",
|
|
scheduler: "karras",
|
|
seed: 2416682767,
|
|
steps: 20
|
|
}],
|
|
latent_image: [{
|
|
width: 640,
|
|
height: 512,
|
|
}],
|
|
latent_upscale: [{
|
|
width: 1280,
|
|
height: 1024,
|
|
upscale_by: 2,
|
|
upscale_method: "Latent"
|
|
}]
|
|
}
|
|
})
|
|
|
|
expect(() => ComfyBoxStdPrompt.parse(converted)).not.toThrow();
|
|
}
|
|
|
|
test__convertsAdditionalNetworks() {
|
|
const infotext: A1111ParsedInfotext = {
|
|
positive: "1girl, pink hair",
|
|
negative: "(worst quality, low quality:1.4)",
|
|
width: 512,
|
|
height: 768,
|
|
modelHash: "0873291ac5",
|
|
modelName: "AbyssOrangeMix2_nsfw",
|
|
cfgScale: 6,
|
|
sampler: "DPM++ SDE Karras",
|
|
seed: 780207036,
|
|
steps: 20,
|
|
denoise: 0.2,
|
|
extraNetworks: {},
|
|
extraParams: {
|
|
"addnet enabled": "True",
|
|
"addnet model 1": "ElysiaV3-000002(6d3eb064dcc1)",
|
|
"addnet model 2": "elfmorie2(a34cd9a8c3cc)",
|
|
"addnet module 1": "LoRA",
|
|
"addnet module 2": "LoRA",
|
|
"addnet weight a 1": "0.9",
|
|
"addnet weight a 2": "1",
|
|
"addnet weight b 1": "0.7",
|
|
"addnet weight b 2": "0.8",
|
|
"ensd": "31337",
|
|
"mask blur": "1",
|
|
"sd upscale overlap": "64",
|
|
"sd upscale upscaler": "4x_Valar_v1",
|
|
// XXX: just make sure it doesn't fall over for now
|
|
// this prompt format I swear...
|
|
"template": "1girl",
|
|
"negative template": "(worst quality",
|
|
}
|
|
}
|
|
|
|
const converted = convertA1111ToStdPrompt(infotext)
|
|
|
|
expect(converted).toEqual({
|
|
version: 1,
|
|
metadata: {
|
|
created_with: "stable-diffusion-webui",
|
|
extra_data: {
|
|
a1111: {
|
|
params: {
|
|
"ensd": "31337",
|
|
// TODO
|
|
"template": "1girl",
|
|
"negative template": "(worst quality",
|
|
}
|
|
}
|
|
}
|
|
},
|
|
parameters: {
|
|
checkpoint: [{
|
|
model_name: "AbyssOrangeMix2_nsfw",
|
|
model_hashes: {
|
|
a1111_shorthash: "0873291ac5",
|
|
}
|
|
}],
|
|
conditioning: [{
|
|
"$meta": {
|
|
types: ["positive"]
|
|
},
|
|
text: "1girl, pink hair",
|
|
}, {
|
|
"$meta": {
|
|
types: ["negative"]
|
|
},
|
|
text: "(worst quality, low quality:1.4)",
|
|
}],
|
|
lora: [{
|
|
module_name: "LoRA",
|
|
model_name: "ElysiaV3-000002",
|
|
model_hashes: {
|
|
addnet_shorthash: "6d3eb064dcc1"
|
|
},
|
|
strength_unet: 0.9,
|
|
strength_tenc: 0.7,
|
|
},
|
|
{
|
|
module_name: "LoRA",
|
|
model_name: "elfmorie2",
|
|
model_hashes: {
|
|
addnet_shorthash: "a34cd9a8c3cc"
|
|
},
|
|
strength_unet: 1,
|
|
strength_tenc: 0.8,
|
|
}],
|
|
k_sampler: [{
|
|
cfg_scale: 6,
|
|
denoise: 0.2,
|
|
sampler_name: "dpmpp_sde",
|
|
scheduler: "karras",
|
|
seed: 780207036,
|
|
steps: 20
|
|
}],
|
|
latent_image: [{
|
|
width: 512,
|
|
height: 768,
|
|
mask_blur: 1
|
|
}],
|
|
sd_upscale: [{
|
|
upscaler: "4x_Valar_v1",
|
|
overlap: 64
|
|
}]
|
|
}
|
|
})
|
|
|
|
expect(() => ComfyBoxStdPrompt.parse(converted)).not.toThrow();
|
|
}
|
|
}
|