Skip to content

Commit

Permalink
tweak rescond using the fooocus pos/neg split multipliers
Browse files Browse the repository at this point in the history
produces a slight quality improvement
  • Loading branch information
mcmonkey4eva committed Sep 28, 2023
1 parent a4f9507 commit 36bc437
Showing 1 changed file with 16 additions and 13 deletions.
29 changes: 16 additions & 13 deletions src/BuiltinExtensions/ComfyUIBackend/WorkflowGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ static WorkflowGenerator()
#region Positive Prompt
AddStep(g =>
{
g.FinalPrompt = g.CreateConditioning(g.UserInput.Get(T2IParamTypes.Prompt), g.FinalClip, g.UserInput.Get(T2IParamTypes.Model));
g.FinalPrompt = g.CreateConditioning(g.UserInput.Get(T2IParamTypes.Prompt), g.FinalClip, g.UserInput.Get(T2IParamTypes.Model), true);
}, -8);
#endregion
#region ReVision/UnCLIP
Expand Down Expand Up @@ -225,7 +225,7 @@ static WorkflowGenerator()
#region Negative Prompt
AddStep(g =>
{
g.FinalNegativePrompt = g.CreateConditioning(g.UserInput.Get(T2IParamTypes.NegativePrompt), g.FinalClip, g.UserInput.Get(T2IParamTypes.Model));
g.FinalNegativePrompt = g.CreateConditioning(g.UserInput.Get(T2IParamTypes.NegativePrompt), g.FinalClip, g.UserInput.Get(T2IParamTypes.Model), false);
}, -7);
#endregion
#region ControlNet
Expand Down Expand Up @@ -434,8 +434,8 @@ bool getBestFor(string phrase)
{
g.FinalVae = new() { "20", 2 };
}
prompt = g.CreateConditioning(g.UserInput.Get(T2IParamTypes.Prompt), new JArray() { "20", 1 }, refineModel);
negPrompt = g.CreateConditioning(g.UserInput.Get(T2IParamTypes.NegativePrompt), new JArray() { "20", 1 }, refineModel);
prompt = g.CreateConditioning(g.UserInput.Get(T2IParamTypes.Prompt), new JArray() { "20", 1 }, refineModel, true);
negPrompt = g.CreateConditioning(g.UserInput.Get(T2IParamTypes.NegativePrompt), new JArray() { "20", 1 }, refineModel, false);
}
if (ComfyUIBackendExtension.FeaturesSupported.Contains("aitemplate") && g.UserInput.Get(ComfyUIBackendExtension.AITemplateParam))
{
Expand Down Expand Up @@ -695,11 +695,14 @@ public JObject Generate()
}

/// <summary>Creates a "CLIPTextEncode" or equivalent node for the given input.</summary>
public JArray CreateConditioningDirect(string prompt, JArray clip, T2IModel model)
public JArray CreateConditioningDirect(string prompt, JArray clip, T2IModel model, bool isPositive)
{
string node;
if (model is not null && model.ModelClass is not null && model.ModelClass.ID == "stable-diffusion-xl-v1-base")
{
double mult = isPositive ? 1.5 : 0.8;
int width = UserInput.Get(T2IParamTypes.Width, 1024);
int height = UserInput.GetImageHeight();
node = CreateNode("CLIPTextEncodeSDXL", (_, n) =>
{
n["inputs"] = new JObject()
Expand All @@ -709,10 +712,10 @@ public JArray CreateConditioningDirect(string prompt, JArray clip, T2IModel mode
["text_l"] = prompt,
["crop_w"] = 0,
["crop_h"] = 0,
["width"] = UserInput.Get(T2IParamTypes.Width, 1024),
["height"] = UserInput.GetImageHeight(),
["target_width"] = UserInput.Get(T2IParamTypes.Width, 1024),
["target_height"] = UserInput.GetImageHeight()
["width"] = (int)(width * mult),
["height"] = (int)(height * mult),
["target_width"] = width,
["target_height"] = height
};
});
}
Expand All @@ -733,10 +736,10 @@ public JArray CreateConditioningDirect(string prompt, JArray clip, T2IModel mode
public record struct RegionHelper(JArray PartCond, JArray Mask);

/// <summary>Creates a "CLIPTextEncode" or equivalent node for the given input, applying prompt-given conditioning modifiers as relevant.</summary>
public JArray CreateConditioning(string prompt, JArray clip, T2IModel model)
public JArray CreateConditioning(string prompt, JArray clip, T2IModel model, bool isPositive)
{
PromptRegion regionalizer = new(prompt);
JArray globalCond = CreateConditioningDirect(regionalizer.GlobalPrompt, clip, model);
JArray globalCond = CreateConditioningDirect(regionalizer.GlobalPrompt, clip, model, isPositive);
if (regionalizer.Parts.IsEmpty())
{
return globalCond;
Expand All @@ -746,7 +749,7 @@ public JArray CreateConditioning(string prompt, JArray clip, T2IModel model)
JArray lastMergedMask = null;
foreach (PromptRegion.Part part in regionalizer.Parts)
{
JArray partCond = CreateConditioningDirect(part.Prompt, clip, model);
JArray partCond = CreateConditioningDirect(part.Prompt, clip, model, isPositive);
string regionNode = CreateNode("SwarmSquareMaskFromPercent", (_, n) =>
{
n["inputs"] = new JObject()
Expand Down Expand Up @@ -797,7 +800,7 @@ public JArray CreateConditioning(string prompt, JArray clip, T2IModel model)
};
});
string backgroundPrompt = string.IsNullOrWhiteSpace(regionalizer.BackgroundPrompt) ? regionalizer.GlobalPrompt : regionalizer.BackgroundPrompt;
JArray backgroundCond = CreateConditioningDirect(backgroundPrompt, clip, model);
JArray backgroundCond = CreateConditioningDirect(backgroundPrompt, clip, model, isPositive);
string mainConditioning = CreateNode("ConditioningSetMask", (_, n) =>
{
n["inputs"] = new JObject()
Expand Down

0 comments on commit 36bc437

Please sign in to comment.