Часть [Вне очереди](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[]`). Старые картинки не трогаем.