Split SwarmUI portraits into a model catalog and layered prompts.
Picker is Swarm intersect config, preset style/shot inherit model defaults, and living saves lift the old preset shape.
This commit is contained in:
@@ -11,32 +11,23 @@ internal static class PortraitPromptBuilder
|
||||
PortraitKind kind,
|
||||
string? promptExtra = null)
|
||||
{
|
||||
var kindPreset = profile.KindPreset;
|
||||
var parts = new List<string>();
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(profile.Positive))
|
||||
{
|
||||
parts.Add(profile.Positive.Trim());
|
||||
}
|
||||
Add(parts, profile.ModelPositive);
|
||||
Add(parts, profile.Style);
|
||||
Add(parts, profile.ShotType);
|
||||
|
||||
if (kind == PortraitKind.Custom)
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(promptExtra))
|
||||
{
|
||||
parts.Add(promptExtra.Trim());
|
||||
}
|
||||
}
|
||||
else if (!string.IsNullOrWhiteSpace(kindPreset.Positive))
|
||||
{
|
||||
parts.Add(kindPreset.Positive.Trim());
|
||||
Add(parts, promptExtra);
|
||||
}
|
||||
|
||||
parts.Add(DescribeSubject(card));
|
||||
Add(parts, profile.Pose);
|
||||
Add(parts, DescribeSubject(card));
|
||||
parts.Add($"age {card.Age}");
|
||||
|
||||
foreach (var row in card.Body)
|
||||
{
|
||||
parts.Add($"{row.Label.ToLowerInvariant()} {row.Value.ToLowerInvariant()}");
|
||||
Add(parts, $"{row.Label.ToLowerInvariant()} {row.Value.ToLowerInvariant()}");
|
||||
}
|
||||
|
||||
foreach (var item in PortraitVisibleWorn.Filter(card.Worn))
|
||||
@@ -44,15 +35,15 @@ internal static class PortraitPromptBuilder
|
||||
var color = item.ColorLabel ?? item.Color;
|
||||
if (!string.IsNullOrWhiteSpace(color))
|
||||
{
|
||||
parts.Add($"wearing {item.Label.ToLowerInvariant()} in {color.ToLowerInvariant()}");
|
||||
Add(parts, $"wearing {item.Label.ToLowerInvariant()} in {color.ToLowerInvariant()}");
|
||||
}
|
||||
else
|
||||
{
|
||||
parts.Add($"wearing {item.Label.ToLowerInvariant()}");
|
||||
Add(parts, $"wearing {item.Label.ToLowerInvariant()}");
|
||||
}
|
||||
}
|
||||
|
||||
var positive = string.Join(", ", parts.Where(part => part.Length > 0));
|
||||
var positive = string.Join(", ", parts);
|
||||
var negative = SwarmUiLoraFormatter.AppendLoraTags(
|
||||
profile.Negative.Trim(),
|
||||
profile.NegativeLoras);
|
||||
@@ -60,6 +51,16 @@ internal static class PortraitPromptBuilder
|
||||
return (positive, negative);
|
||||
}
|
||||
|
||||
private static void Add(List<string> parts, string? value)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(value))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
parts.Add(value.Trim());
|
||||
}
|
||||
|
||||
private static string DescribeSubject(PersonCardResponse card)
|
||||
{
|
||||
if (card.Age <= 11)
|
||||
|
||||
Reference in New Issue
Block a user