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:
Leonid Pershin
2026-08-20 14:08:11 +03:00
parent cc9ea18480
commit 81fd3f6181
20 changed files with 1142 additions and 179 deletions
+1
View File
@@ -9,6 +9,7 @@
| [Пропуск сборки](skip-stale-build.md) | 49 |
| [Что нового](whats-new.md) | 54 |
| [Состояние экрана](view-state.md) | 55 |
| [Модели портретов](portrait-models.md) | 60 |
Люди: [`../02-people/people.md`](../02-people/people.md). Штат: [`../03-staffing/staffing.md`](../03-staffing/staffing.md).
Расписание: [`../04-schedule/schedule.md`](../04-schedule/schedule.md). Присутствие: [`../05-ai/ai.md`](../05-ai/ai.md).
+43
View File
@@ -0,0 +1,43 @@
Часть [Вне очереди](README.md). Соседей по папке не читать, если задача не про них.
# Модели Swarm и слои промпта
### Зачем
Пикер моделей не должен предлагать то, чего нет в нашем конфиге. Дефолты генерации живут
на модели; пресет задаёт стиль и тип кадра и может переопределить дефолты. Промпт собирается
слоями, а не одним «базовым» текстом пресета.
### Было / Стало / Почему
**Было.** Пресет сам держал модель, steps/cfg/sampler и `positive`. Список Swarm только
наполнял комбобоксы. «Свой промпт» у custom **заменял** текст кадра. `portraitSettings` в
сейве — копия этого файла.
**Стало.** В конфиге каталог `models` (whitelist) и пресеты. Пикер = Swarm ∩ каталог; при
офлайне Swarm — все id из каталога. У модели: закрытый набор настроек генерации (steps, cfg,
clip skip, sampler, scheduler, seed, LoRA) и обычно пустые base positive/negative. У пресета:
модель, **стиль** (бывший `positive`), доп. negative, размеры и **тип кадра** на avatar/custom/full.
Оверрайды генерации у пресета — nullable, в UI под спойлером. Промпт:
1. base positive модели
2. стиль пресета
3. тип кадра
4. «Свой промпт» (`promptExtra`, только custom; после кадра, не вместо)
5. поза (слот пустой, без поля в UI)
6. внешность: кто это, возраст, тело
7. одежда
8. хвост пустой
Negative: модель + необязательное дополнение пресета. Ширина/высота остаются на виде кадра.
**Почему.** Модель задаёт «как считать картинку»; пресет — «какой это школьный снимок».
Гость по-прежнему рисует с копии школы, не с глобального файла.
### Что не входит
Зеркало всех `ListT2IParams`. Кнопка настроек в меню. Редактор каталога «добавить модель из
Swarm». Поза в UI. Бамп версии сокета. Перегенерация уже лежащих PNG.
Живые школы: `NormalizeAfterLoad` поднимает старый пресет (`positive``style`, kind
`positive``shotType`, уникальные `model``models[]`). Старые картинки не трогаем.