From 3eb656d0df661f3be72b1f6204bc2dc60a920ac4 Mon Sep 17 00:00:00 2001 From: space-nuko <24979496+space-nuko@users.noreply.github.com> Date: Thu, 18 May 2023 20:26:24 -0500 Subject: [PATCH] forgot to convert prompt --- src/lib/ComfyBoxStdPrompt.ts | 19 +++++++++++++++++++ src/lib/convertA1111ToStdPrompt.ts | 14 +++++++------- src/tests/convertA1111ToStdPromptTests.ts | 12 ++++++++++++ 3 files changed, 38 insertions(+), 7 deletions(-) diff --git a/src/lib/ComfyBoxStdPrompt.ts b/src/lib/ComfyBoxStdPrompt.ts index af04ed3..a5ff3d8 100644 --- a/src/lib/ComfyBoxStdPrompt.ts +++ b/src/lib/ComfyBoxStdPrompt.ts @@ -108,6 +108,18 @@ const GroupDynamicThresholding = z.object({ }) export type ComfyBoxStdGroupDynamicThresholding = z.infer +const GroupAestheticEmbedding = z.object({ + model_name: z.string(), + lr: z.number(), + slerp: z.boolean(), + slerp_angle: z.number(), + steps: z.number(), + positive: z.string(), + negative: z.string(), + weight: z.number(), +}) +export type ComfyBoxStdGroupAestheticEmbedding = z.infer + const group = (s: ZodTypeAny) => z.optional(z.array(s).nonempty()); const Parameters = z.object({ @@ -151,4 +163,11 @@ const ComfyBoxStdPrompt = z.object({ }) export default ComfyBoxStdPrompt + +/* + * A standardized Stable Diffusion prompt and parameter format, to be used with + * an encompassing workflow. Aims to encompass an arbitrary number of parameter + * counts and types, so that most ComfyUI workflows can have parts of their + * prompts transferred between each other. + */ export type ComfyBoxStdPrompt = z.infer diff --git a/src/lib/convertA1111ToStdPrompt.ts b/src/lib/convertA1111ToStdPrompt.ts index 82bc03a..37a43e5 100644 --- a/src/lib/convertA1111ToStdPrompt.ts +++ b/src/lib/convertA1111ToStdPrompt.ts @@ -33,6 +33,11 @@ export default function convertA1111ToStdPrompt(infotext: A1111ParsedInfotext): const parameters: ComfyBoxStdParameters = {} + parameters.prompt = [{ + positive: infotext.positive, + negative: infotext.negative, + }] + const hrUp = popOpt("hires upscale"); const hrSz = popOpt("hires resize"); let hrScaleBy = hrUp ? parseFloat(hrUp) : undefined; @@ -138,6 +143,8 @@ export default function convertA1111ToStdPrompt(infotext: A1111ParsedInfotext): }] } + // TODO ControlNet + for (const [extraNetworkType, extraNetworks] of Object.entries(infotext.extraNetworks)) { for (const extraNetworkParams of extraNetworks) { let strength; @@ -224,13 +231,6 @@ export default function convertA1111ToStdPrompt(infotext: A1111ParsedInfotext): found = infotext.extraParams[`addnet model ${index}`] } - for (const [key, value] of Object.entries(infotext.extraParams)) { - if (key.startsWith("addnet model ")) { - const index = key.replace("addnet module ", "") - // delete infotext.extraParams[key]; - } - } - const prompt: ComfyBoxStdPrompt = { prompt: { metadata: { diff --git a/src/tests/convertA1111ToStdPromptTests.ts b/src/tests/convertA1111ToStdPromptTests.ts index 5ef0b9a..e1c63e8 100644 --- a/src/tests/convertA1111ToStdPromptTests.ts +++ b/src/tests/convertA1111ToStdPromptTests.ts @@ -44,6 +44,10 @@ export default class convertA1111ToStdPromptTests extends UnitTest { a1111_shorthash: "925997e9", } }], + prompt: [{ + 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" + }], clip: [{ clip_skip: 2, }], @@ -110,6 +114,10 @@ export default class convertA1111ToStdPromptTests extends UnitTest { a1111_shorthash: "0f0eaaa61e", } }], + prompt: [{ + 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)" + }], clip: [{ clip_skip: 2, }], @@ -204,6 +212,10 @@ export default class convertA1111ToStdPromptTests extends UnitTest { a1111_shorthash: "0873291ac5", } }], + prompt: [{ + positive: "1girl, pink hair", + negative: "(worst quality, low quality:1.4)", + }], lora: [{ module_name: "LoRA", model_name: "ElysiaV3-000002",