Worum es geht
Ein Bildmodell erfindet bei jedem Bild ein neues Gesicht. Welches es wird, hängt an zwei Dingen: der Beschreibung und dem Seed, einer Zahl, die das Anfangsrauschen festlegt. Gleiche Beschreibung, gleicher Seed, gleiches Modell: gleiches Bild. Gleiche Beschreibung, anderer Seed: ein anderer Mensch, der zur Beschreibung passt.
Das nutzt diese Lektion. Aus einer Beschreibung entstehen zwölf Kandidaten, du suchst dir einen aus. Dieses eine Porträt ist danach die Referenz: Aus ihm entsteht in A2 der Datensatz, aus dem Datensatz in A3 das LoRA. Was hier nicht stimmt, zieht sich durch den ganzen Kurs.
Was vorher passiert ist
In Lektion A0 ist der Kursordner entstanden, und deine Figur steht in figur.json: Beschreibung, Stimme, Stichwort. Installiert ist noch nichts.
Der Ablauf
1. ComfyUI einrichten
ComfyUI ist die Werkbank für Bild- und Videomodelle: Es lädt Modelle, verbindet sie zu einem Graphen und rechnet. Bedient wird es im Kurs über seine Schnittstelle, nicht über die Oberfläche. Das Skript skripte/einrichten/comfyui.py holt ComfyUI 0.37 nach werkzeuge/ComfyUI, legt eine eigene Python-Umgebung an, installiert PyTorch für CUDA 13, lädt die drei Dateien von Z-Image Turbo nach modelle/ und startet ComfyUI im Hintergrund.
2. Kandidaten erzeugen
skripte/gesichter.py setzt deine Beschreibung in eine feste Vorlage für ein neutrales Studio-Porträt ein: Kopf und Schultern, Blick in die Kamera, graues T-Shirt, grauer Hintergrund, weiches Licht, natürliche Haut ohne Retusche. Für jeden Seed legt es einen ComfyUI-Auftrag als Datei ab, schickt ihn ab und holt das Bild. Am Ende setzt es alle Kandidaten auf einen Kontaktbogen.
Z-Image Turbo braucht dafür nur acht Rechenschritte pro Bild; ist das Modell einmal geladen, dauert ein Porträt Sekunden.
3. Aussuchen und feinschleifen
Selten sitzt alles in der ersten Runde. Dann gibt es zwei Hebel: neue Seeds für neue Gesichter oder einen Seed festhalten und die Beschreibung fein ändern. Beim Lehrer liefen mehrere Runden: zuerst zwei Modelle im Vergleich, dann zehn Seeds mit Z-Image, dann mit Seed 3007 nur noch Feinschliff an Haarfarbe und Unordnung.

Eine Beschreibung, zehn Seeds, zehn Menschen. Gewählt wurde Seed 3007, unten in der Mitte.
KI-generiert.
Seed festhalten, ein Wort ändern: Die Haarfarbe wird dunkler, das Gesicht bleibt. Je kleiner die Änderung, desto sicherer bleibt es derselbe Mensch.
KI-generiert.4. Übernehmen
Das gewählte Bild wird zu figur/gesicht/referenz.png, die Wahl kommt als Zeile in entscheidungen.md. pruefen.py A1 hakt beides ab.
Von Hand: der ganze Weg
Alle Befehle laufen im Kursordner. Mit -v zeigt jedes Skript jeden Befehl, bevor es ihn ausführt; mit --zeigen gibt es die Befehle nur aus. Nach jedem Lauf liegt ein Protokoll protokoll_<skript>.sh im Ergebnisordner, hier figur/gesicht/protokoll_gesichter.sh – alle Schritte zum Nachlesen oder erneut Ausführen.
Im Terminal, im Kursordner
# 1. ComfyUI einrichten und starten (einmalig, rund 20 GB Download)
python3 skripte/einrichten/comfyui.py -v
# ist dein System-Python neuer als 3.13: --python python3.12
# 2. Zwölf Kandidaten aus der Beschreibung in figur.json
python3 skripte/gesichter.py -v
# 3. Kontaktbogen ansehen und wählen (hier Seed 1007)
xdg-open figur/gesicht/kontaktbogen.jpg
cp figur/gesicht/kandidaten/seed_1007.png figur/gesicht/referenz.png
echo "| A1 | $(date +%F) | Gesicht: Seed 1007 | natürlich, mit Charakter |" >> entscheidungen.md
python3 skripte/pruefen.py A1So sieht -v für einen Kandidaten aus. Der Auftrag an ComfyUI ist eine JSON-Datei, die das Skript schreibt und dann abschickt:
# Seed 1000
▸ cat > figur/gesicht/auftraege/seed_1000.json <<'EOF'
{ "1": { "class_type": "UNETLoader", "inputs": { "unet_name": "z_image_turbo_bf16.safetensors", … } }, … }
EOF
▸ python3 skripte/werkzeuge/comfy.py ausfuehren figur/gesicht/auftraege/seed_1000.json --ziel figur/gesicht/kandidaten/seed_1000.png
…
▸ werkzeuge/ComfyUI/venv/bin/python skripte/werkzeuge/kontaktbogen.py figur/gesicht/kandidaten/seed_1000.png … --aus figur/gesicht/kontaktbogen.jpg --spalten 4Feinschliff an einem Gesicht: Seed festhalten und eine eigene Beschreibung mitgeben.
Im Terminal, im Kursordner
python3 skripte/gesichter.py --seeds 1007 --prompt "Neutral reference portrait photo of a man in his early thirties, short dark ash-blond hair with the first grey strands, light stubble, grey-blue eyes, slightly darker hair, …" -vIm Pod gibt es kein xdg-open: Öffne figur/gesicht/kontaktbogen.jpg im Dateibrowser von JupyterLab oder hol ihn mit scp auf deinen Rechner.
Entscheidungen
Welches Bildmodell?
Z-Image Turbo
Im Vergleich mit Krea 2 Turbo wirkten die Gesichter von Z-Image natürlicher, Krea 2 eher glatt und älter. Dazu kommt die Lizenz: Z-Image steht unter Apache 2.0, Krea 2 ist nur bis 1 Mio. USD Umsatz frei. Und auf Z-Image wird in A3 das LoRA trainiert – Gesicht und Training aus einem Modell.

Derselbe Prompt, dieselben Seeds: links Z-Image Turbo, rechts Krea 2 Turbo.
KI-generiert.Gleich neutral oder erst in einer Szene?
Im Kurs gleich ein neutrales Porträt
Der Lehrer entstand auf dem Umweg: zuerst ein Foto mit Stimmung im Klassenzimmer, danach mit Qwen-Image-Edit in ein neutrales Porträt verwandelt. Im Kurs geht es direkt, weil die Referenz für A2 ohnehin neutral sein muss und so ein Schritt wegfällt. Ob der direkte Weg ebenso lebendige Gesichter liefert, zeigt der erste Kursdurchlauf; wer lieber in einer Szene sucht, gibt mit --prompt eine eigene Beschreibung mit.
Wie viele Kandidaten?
Zwölf je Runde, lieber mehrere Runden
Zwölf Gesichter passen auf einen Kontaktbogen und lassen sich in Ruhe vergleichen. Statt hundert Seeds auf einmal lieber eine Runde ansehen, die Beschreibung schärfen und neu würfeln.
Welches Gesicht?
Seed 3007
Natürlich, nicht zu glatt, ein Gesicht mit Charakter, das man in vielen Szenen glaubt. Die Wahl ist Geschmackssache und genau deshalb deine: Der Agent kann Kandidaten vorlegen, aussuchen musst du.
Fallstricke
Alle Gesichter sehen nach Werbung aus
Bildmodelle neigen zu makellosen Gesichtern. Für eine Figur, die echt wirken soll, sind kleine Unregelmäßigkeiten wichtiger als Schönheit. Die Beschreibung des Lehrers nennt ausdrücklich eine leicht schiefe Nase, die ihm Charakter gibt.
LösungKleine Makel und natürliche Haut beschreiben: Poren, Sommersprossen, eine leicht schiefe Nase, „no retouching“.
Eine kleine Änderung am Prompt macht einen neuen Menschen
Schon ein anderes Alter oder eine andere Frisur in der Beschreibung kann das ganze Gesicht kippen lassen. Mit festem Seed und kleinen Schritten bleibt es derselbe Mensch (Abb. A1.2).
LösungDen Seed festhalten und nur ein Detail auf einmal ändern.
Beim Neutralisieren driftet das Gesicht
Wer das Gesicht in einer Szene findet und danach mit Qwen-Image-Edit Hintergrund, Kleidung und Blick ändert, bekommt nicht immer denselben Menschen zurück. Je mehr auf einmal geändert wird, desto eher.
LösungNur auf dem Umweg nötig: wenig auf einmal ändern und mehrere Varianten vergleichen.

Der Umweg beim Lehrer: links oben das Original, daneben Versuche, es zu neutralisieren. Nicht jede Variante ist noch er.
KI-generiert.ComfyUI startet nicht
Das Skript wartet bis zu drei Minuten auf ComfyUI und bricht dann mit einem Hinweis auf das Log ab. Häufigste Ursachen: ein zu neues System-Python, ein Treiber unter Version 580 oder eine belegte Grafikkarte.
Lösungwerkzeuge/comfyui.log lesen; bei Python 3.14 die Umgebung mit --python python3.12 neu anlegen.
Mit KI vereinfacht
Der Agent richtet ComfyUI ein, lädt die Modelle, erzeugt die Kandidaten und legt dir den Kontaktbogen vor. Danach wartet er: Welches Gesicht es wird, entscheidest du. Erst dann übernimmt er die Wahl als Referenz und trägt sie in entscheidungen.md ein.
Der Agent
- richtet ComfyUI und die Modelle ein und startet es
- erzeugt zwölf Kandidaten aus figur.json
- baut den Kontaktbogen und zeigt ihn dir
- schleift auf Wunsch einen Seed nach
- übernimmt deine Wahl und prüft mit pruefen.py A1
Du
- wählst das Gesicht
- sagst, was am Gesicht noch nicht stimmt
Mit lokalem Qwen: Z-Image braucht mit Textkodierer rund 20 GB Grafikspeicher, das Sprachmodell rund 18 GB – beides zusammen passt nicht auf 24 GB. Mit OLLAMA_KEEP_ALIVE=0 aus der Einrichtung gibt Ollama die Karte nach jeder Antwort frei, und ComfyUI kann rechnen.
