Stack portrait LoRAs and embeddings from model, preset, and shot kind.

Swarm loads LoRAs via loras/loraweights; embeddings go in the prompt as embed tags, not lora tags.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Leonid Pershin
2026-08-20 14:58:26 +03:00
co-authored by Cursor
parent 5d46550f12
commit 9e217e93eb
5 changed files with 33 additions and 20 deletions
+12 -9
View File
@@ -507,9 +507,10 @@ land under `saves/{id}.portraits/` and survive until the school is deleted.
Returns the positive and negative prompts SwarmUI would receive, without generating an image.
Same `kind` query as GET portrait. For `kind=custom`, optional query `promptExtra` is appended after
the shot type; when omitted, the last saved custom prompt is used if one exists. Unknown school
is `404` `unknown-school`; unknown person is `404` `unknown-person`. Invalid `kind` is
`400` `invalid-query`; custom without a usable prompt is `400` `invalid-body`.
the shot type; when omitted, the last saved custom prompt is used if one exists. Configured
embeddings appear as `<embed:name>` (weight ≠ 1: `<embed:name:w>`); LoRA is not written into the
prompt. Unknown school is `404` `unknown-school`; unknown person is `404` `unknown-person`. Invalid
`kind` is `400` `invalid-query`; custom without a usable prompt is `400` `invalid-body`.
```json
{
@@ -528,8 +529,10 @@ so the client can disable generate buttons and show reachability without trying
### `GET /api/settings/swarmui`
Returns the **default** SwarmUI template (`swarmui.json`): a `models` catalog (id, default
generation knobs, usually empty base positive/negative), named presets (model id, `style`, extra
negative, optional generation overrides, per-kind size/`shotType`), `activePresetId` and `ageRules`.
generation knobs, usually empty base positive/negative, LoRA and embedding lists), named presets
(model id, `style`, extra negative, optional generation overrides, per-kind size/`shotType`, LoRA
and embedding lists), `activePresetId` and `ageRules`. LoRA and embeddings on the model, preset and
shot kind concatenate at generate time.
The model picker in the UI is Swarm's list intersected with `models`. A new school copies this into
its save as `portraitSettings`. Living schools generate from that copy, not from this file. Older
saves without `models` lift on load (`positive``style`, kind `positive``shotType`).
@@ -543,10 +546,10 @@ return `400` `invalid-body`. Already-created schools keep the copy they were cre
When SwarmUI is configured and reachable, proxies `ListT2IParams` and returns
`{ connected, models, loras, embeddings, samplers, schedulers }` for the settings UI. LoRA and
embeddings can be set on the model, the preset, and each shot kind; layers concatenate.
The client hides Swarm models that are missing from the template catalog. When SwarmUI is off or unreachable, `connected`
is false and the lists are empty; the picker then shows the catalog ids so fields can be filled
manually.
embeddings can be set on the model, the preset, and each shot kind; layers concatenate. The client
hides Swarm models that are missing from the template catalog. When SwarmUI is off or unreachable,
`connected` is false and the lists are empty; the picker then shows the catalog ids so fields can
be filled manually.
### `GET /api/schools/{id}/dress-rules`