Worum es geht
Ein Bildmodell kennt viele Gesichter, aber nicht seins. Beschreibt man ihn nur mit Worten, kommt bei jedem Bild ein anderer Mann heraus, der ihm ähnlich sieht. Für eine Figur, die durch viele Videos trägt, reicht das nicht.
Ein LoRA (Low-Rank Adaptation) löst das. Es ist eine kleine Zusatzdatei zum Bildmodell: 170 MB neben den 12 GB des Modells selbst. Sie bringt dem Modell ein neues Wort bei, hier l3hr3r. Steht das Wort im Prompt, erscheint er. Steht es nicht da, soll sich das Modell verhalten wie vorher. Dieser zweite Teil ist schwieriger, als er klingt.
Was vorher passiert ist
Das Gesicht stammt aus Lektion A1: ein Prompt, mehrere Modelle und Seeds, am Ende Seed 3007 von Z-Image Turbo. In Lektion A2 wurden aus diesem einen Porträt 23 Bilder: sechs Blickwinkel, fünf Gesichtsausdrücke, viele Kleidungen, Orte und Lichtstimmungen. Das Gesicht bleibt dabei immer gleich, alles andere ändert sich.

Der Datensatz aus Lektion A2. Oben die Blickwinkel vor neutralem Grund, darunter Ausdrücke, Kleidung und Orte.
KI-generiert.Der Ablauf
1. Bildbeschreibungen schreiben
Zu jedem Bild gehört eine Textdatei mit demselben Namen. Jede Beschreibung beginnt gleich und nennt dann alles, was sich ändern darf: Blickwinkel, Kleidung, Ort, Licht, Ausdruck.
a photo of l3hr3r, a man, a three-quarter view close-up at eye level,
head turned to the side with a slight smile, wearing a plain light grey
t-shirt, plain light grey studio background, soft even studio lighting
Was nicht in der Beschreibung steht, schreibt das Training dem Stichwort zu. Das Gesicht wird nie beschrieben, also lernt das Modell: Gesicht = l3hr3r. Würde man „blaugraue Augen“ in jede Beschreibung schreiben, gehörten die Augen nicht mehr fest zu ihm, sondern zum Prompt.
2. Basismodell und Adapter wählen
Trainiert wird auf Z-Image Turbo, also auf demselben Modell, mit dem später die Bilder entstehen. Turbo-Modelle sind destilliert: Sie brauchen nur etwa neun Schritte pro Bild statt mehrerer Dutzend. Trainiert man direkt darauf, geht diese Abkürzung verloren. Der Training Adapter v2 von ostris fängt das ab. Er läuft nur während des Trainings mit und wird danach nicht mehr gebraucht.
3. Konfiguration
Das Training läuft mit dem ai-toolkit von ostris und wird über eine einzige YAML-Datei gesteuert. Die wichtigsten Zeilen:
trigger_word: "l3hr3r"
network: { type: "lora", linear: 32, linear_alpha: 32 }
save: { save_every: 250, max_step_saves_to_keep: 8 }
train:
steps: 2000
lr: 1e-4
optimizer: "adamw8bit"
diff_output_preservation: true # Schutz gegen das Durchsickern
diff_output_preservation_class: "man"
model:
arch: "zimage"
assistant_lora_path: ".../zimage_turbo_training_adapter_v2.safetensors"
quantize: true # qfloat8, passt in 24 GB
low_vram: false
4. Trainieren und Zwischenstände sammeln
Alle 250 Schritte speichert das Training einen Zwischenstand und erzeugt fünf Testbilder mit festem Seed. Vier davon enthalten das Stichwort: Klassenzimmer, Park, Nahaufnahme, Porträt vor grauem Grund. Das fünfte enthält es nicht. Es prüft, ob das LoRA dort bleibt, wo es hingehört. Nach 2000 Schritten und 3 Stunden 37 Minuten liegen neun Reihen Testbilder vor.
5. Den richtigen Stand auswählen
Das Training liefert keinen Messwert, der sagt, welcher Stand der beste ist. Die Auswahl passiert mit dem Auge: Ein Skript setzt die Testbilder jedes Zwischenstands neben das Referenzporträt, ein zweites erzeugt für die engere Wahl Szenen mit schwierigen Ausdrücken.

Kontaktabzug für Schritt 1500: links die Referenz, dann vier Bilder mit Stichwort. Das fünfte Bild ist ohne Stichwort entstanden und zeigt richtigerweise einen anderen Mann.
KI-generiert.
Vier Zwischenstände, fünf schwierige Szenen. Bei 1000 und 1250 ist er im Anzug noch nicht ganz er selbst. Ab 1500 sitzt das Gesicht, dafür lacht er verhaltener.
KI-generiert.Entscheidungen
Auf welchem Modell trainieren?
Z-Image Turbo, dieselbe Datei wie in ComfyUI
Apache 2.0, schnell und schon beim Gesicht das beste Ergebnis. Weil Training und Anwendung dieselbe Modelldatei nutzen, gibt es keine Überraschungen zwischen Test und Einsatz.
Wie verhindern, dass er überall auftaucht?
Differential Output Preservation mit der Klasse „man“
Das Training vergleicht laufend: Ein Prompt, in dem „l3hr3r“ durch „man“ ersetzt ist, muss dasselbe liefern wie das Originalmodell. Ohne diesen Schutz ist der erste Versuch gescheitert (siehe Fallstricke).
Wie lange trainieren?
2000 Schritte, alle 250 speichern, alle Stände behalten
Der beste Stand zeigt sich erst im Vergleich. Acht Zwischenstände kosten nur Speicherplatz, ein zweiter Trainingslauf kostet Stunden.
Welchen Zwischenstand nehmen?
Schritt 1500
Bei 1250 trifft das Bild im Anzug die Identität noch nicht. Ab 1500 wird der Ausdruck starrer, Lachen und Überraschung fallen schwächer aus. 1500 ist der Kompromiss. Den Ausdruck holt man über deutliche Formulierungen im Prompt zurück.
Speicher sparen oder Zeit?
low_vram aus
Mit Quantisierung auf 8 Bit passt das Training auch ohne Sparmodus in 24 GB. Der Sparmodus hätte rund 10,7 Sekunden pro Schritt gekostet statt 4 bis 6.
Fallstricke
Sein Gesicht geht auf jeden Mann über
Der erste Versuch lief ohne Schutz. Schon ab Schritt 500 bekam jeder Mann sein Gesicht, auch ohne Stichwort. Für eine Figur, die mit anderen Menschen in einer Szene stehen soll, ist das unbrauchbar.
LösungDifferential Output Preservation einschalten und das Bild ohne Stichwort bei jedem Zwischenstand mitprüfen.

Derselbe Prompt ohne Stichwort, dreimal. Links das Basismodell, in der Mitte der erste Versuch nach 500 Schritten, rechts die fertige Fassung mit Schutz.
KI-generiert.Der Sparmodus verdoppelt die Laufzeit
Mit low_vram: true lagert das Toolkit Teile des Modells aus dem Grafikspeicher aus, und jeder Schritt dauert rund doppelt so lange.
Lösunglow_vram ausschalten, wenn die Quantisierung den Speicher schon ausreichend senkt.
Je länger das Training, desto starrer der Ausdruck
Das LoRA lernt nicht nur das Gesicht, sondern vermutlich auch den häufigsten Ausdruck im Datensatz, ein leichtes Lächeln. Bei späten Ständen lacht er nur noch verhalten.
LösungEinen mittleren Stand wählen und Gefühle im Prompt ausdrücklich beschreiben.
Andere Personen im Bild sehen ihm ähnlich
Auch mit Schutz übernehmen Personen, die in derselben Szene stehen, Züge von ihm. Das Stichwort wirkt auf das ganze Bild, nicht nur auf eine Person.
LösungGesichter der anderen Personen nachträglich austauschen (Lektion A4).
Von Hand: der ganze Weg
Alle Befehle laufen im Kursordner. Die Konfiguration figur/lora/training.yaml liegt fertig im Kit; die Pfade darin
gehen von werkzeuge/ai-toolkit aus.
Im Terminal, im Kursordner
# 1. ai-toolkit nach werkzeuge/ (Python 3.10–3.12)
git clone https://github.com/ostris/ai-toolkit.git werkzeuge/ai-toolkit
cd werkzeuge/ai-toolkit
python3 -m venv venv
venv/bin/pip install --no-cache-dir torch==2.13.0 torchvision==0.28.0 torchaudio==2.11.0 --index-url https://download.pytorch.org/whl/cu130
venv/bin/pip install -r requirements.txt
cd ../..
# 2. Modelle nach modelle/ (rund 28 GB)
hf download Comfy-Org/z_image_turbo split_files/diffusion_models/z_image_turbo_bf16.safetensors --local-dir modelle/Comfy-Org/z_image_turbo
hf download Tongyi-MAI/Z-Image-Turbo --exclude "transformer/diffusion_pytorch_model-*" --exclude "assets/*" --local-dir modelle/Tongyi-MAI/Z-Image-Turbo
hf download ostris/zimage_turbo_training_adapter zimage_turbo_training_adapter_v2.safetensors --local-dir modelle/ostris/zimage_turbo_training_adapter
# 3. Stichwort und Klasse eintragen
sed -i 's/l3hr3r/l3hr3r/g; s/a man/a man/g; s/"man"/"man"/' figur/lora/training.yaml
# 4. Trainieren: rund 3,5 Stunden, alle 250 Schritte ein Zwischenstand mit fünf Testbildern
cd werkzeuge/ai-toolkit && venv/bin/python run.py ../../figur/lora/training.yaml && cd ../..
# 5. Testbilder ansehen, Stand wählen (hier 1500), übernehmen und festhalten
ls figur/lora/zwischenstaende/figur/samples/
cp figur/lora/zwischenstaende/figur/figur_000001500.safetensors figur/lora/figur.safetensors
echo "| A3 | $(date +%F) | Trainingsstand 1500 | Gesicht sitzt, Ausdruck noch lebendig |" >> entscheidungen.md
python3 skripte/pruefen.py A3Die Dateinamen der Zwischenstände folgen dem Muster <name>_<schritt>.safetensors; der Name steht oben in der
Konfiguration (name: "figur"). Der Grund in der Entscheidungszeile ist deiner: Schreib hinein, warum du diesen Stand
genommen hast.
Mit KI vereinfacht
Fast alles in dieser Lektion kann ein Agent übernehmen: Bildbeschreibungen schreiben, die Konfiguration anlegen, das Training starten und beobachten, Kontaktabzüge bauen und das Bild ohne Stichwort prüfen. Eine Frage bleibt bei dir: welcher Stand der richtige ist.
Der Agent
- schreibt die 23 Bildbeschreibungen und prüft, dass keine das Gesicht beschreibt
- legt die Konfiguration an, mit Schutz und Testprompts
- startet das Training und meldet sich bei Fehlern
- baut nach jedem Zwischenstand einen Kontaktabzug
- warnt, sobald das Bild ohne Stichwort ihm ähnelt
Du
- wählst den Zwischenstand
- entscheidest, ob der Ausdruck genügt
Mit dem Skill avatar-figur reicht ein Satz an den Agenten; Stichwort und Klasse liest er aus figur.json:
Trainiere ein LoRA für meine Figur aus figur/datensatz/
und zeig mir alle 250 Schritte den Kontaktabzug.Der Skill ist in Vorbereitung und erscheint mit dem Video zu dieser Lektion.
Mit lokalem Qwen: Während des Trainings braucht ai-toolkit die ganze Grafikkarte. Das Sprachmodell muss dafür
entladen sein; mit OLLAMA_KEEP_ALIVE=0 aus der Einrichtung geschieht das nach jeder Antwort von selbst. Prüf vor dem
Start mit nvidia-smi, dass kein ollama-Prozess mehr Speicher belegt.
