Add Krea portrait models and write appearance as prose.

New schools default to Realism v2.5; living saves keep their catalog.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Leonid Pershin
2026-08-20 16:45:40 +03:00
co-authored by Cursor
parent 8c89f605de
commit ed015b9d6b
9 changed files with 298 additions and 42 deletions
@@ -85,7 +85,8 @@ public class PortraitApiTests(AppHostFixture fixture)
var payload = await response.Content.ReadFromJsonAsync<PortraitPromptPayload>(TestContext.Current.CancellationToken);
Assert.NotNull(payload);
Assert.Equal("avatar", payload!.Kind);
Assert.Contains("age", payload.Positive, StringComparison.OrdinalIgnoreCase);
Assert.Contains("years old", payload.Positive, StringComparison.OrdinalIgnoreCase);
Assert.DoesNotContain("age ", payload.Positive, StringComparison.OrdinalIgnoreCase);
Assert.False(string.IsNullOrWhiteSpace(payload.Negative));
Assert.False(string.IsNullOrWhiteSpace(payload.PresetId));
}
@@ -103,6 +104,8 @@ public class PortraitApiTests(AppHostFixture fixture)
Assert.NotNull(settings);
Assert.NotEmpty(settings!.Presets);
Assert.NotEmpty(settings.Models);
Assert.Contains(settings.Models, model => model.Id == "museByStableYogi_v30TurboGguf.gguf");
Assert.Contains(settings.Models, model => model.Id == "realismByStableYogi_v25INT8Turbo.safetensors");
Assert.False(string.IsNullOrWhiteSpace(settings.ActivePresetId));
}
@@ -122,6 +125,14 @@ public class PortraitApiTests(AppHostFixture fixture)
Assert.True(list.GetArrayLength() > 0);
Assert.True(presets.TryGetProperty("models", out var models));
Assert.True(models.GetArrayLength() > 0);
var ids = models.EnumerateArray().Select(model => model.GetProperty("id").GetString()).ToList();
Assert.Contains("museByStableYogi_v30TurboGguf.gguf", ids);
Assert.Contains("realismByStableYogi_v25INT8Turbo.safetensors", ids);
var defaultPreset = presets.GetProperty("presets").EnumerateArray()
.First(preset => preset.GetProperty("id").GetString() == "default");
Assert.Equal(
"realismByStableYogi_v25INT8Turbo.safetensors",
defaultPreset.GetProperty("model").GetString());
}
[Fact]