---
type: skill
name: authentic-portrait
agent_ready: true
schema_version: 1
bundle_skill: true
bundle_version: "0.28.0"
scope: vault
default_active:
  allgemein: false
  content: true
  business: false
  beratung: false
  automation: false
  image: true
conflicts_with: []
depends_on:
  - nano-banana-image
  - openai-image-gen
trigger_words:
  - authentic-portrait
  - authentisches-bild
  - personen-bild
  - dossier-bild
  - portrait-generieren
  - speaker-card
allowed-tools:
  - Read
  - Write
  - Glob
  - Grep
  - Bash
  - AskUserQuestion
  - Skill
created: 2026-05-19
updated: 2026-05-19
description: "Generiert KI-Bilder mit einer oder mehreren echten Personen aus dem Anwender-Umfeld, bei denen die Identität zu den Referenzfotos passt (Kiefer, Augen, Proportionen, Markenzeichen). Unterstützt zwei gleichwertige Engines: Google Nano Banana über `nano-banana-image` und OpenAI gpt-image-2 über `openai-image-gen`. Lädt Prinzip und Personen-Dossiers aus dem Bildgenerierungs-Pfad, baut den Prompt nach Layer-Reihenfolge (Identität, Outfit, Szene), wählt Referenzbilder nach Slot-Empfehlung und ruft die gewählte Engine als Sub-Skill auf. Durchläuft einen verbindlichen Authentizitäts-Review mit Fallback-Loop. Verwende diesen Skill wenn der Anwender ein Bild mit einer im Vault dokumentierten Person generieren will. Trigger: 'Bild von <Name>', 'Speaker-Foto', 'authentisches Bild'. NICHT triggern bei: generischen Bildern ohne Personen-Identität (nutze `nano-banana-image` oder `openai-image-gen` direkt), Stock-Fotos ohne Dossier, Video- oder Animations-Generierung, DALL-E-Workflows."
---

# Authentic Portrait

Die Pipeline folgt einer festen Layer-Reihenfolge: Identität aus dem Dossier zuerst, dann Outfit und Markenzeichen, dann Szene. Erst danach wählt der Skill die Engine (Nano Banana oder gpt-image-2) und delegiert an den jeweiligen Sub-Skill. Kein Generierungsaufruf ohne vorherigen Self-Review und Anwender-Freigabe.

## Werkzeug-Konvention

Dieser Skill nutzt das interaktive Frage-Werkzeug der ausführenden Umgebung. In Claude Code: `AskUserQuestion`. In anderen Frame-Tools (Codex, Gemini CLI, Copilot CLI): das entsprechende Interactive-Question-Werkzeug. Der Name darf in der Implementation als String belassen werden — das wäre kein Halluzinations-Verstoß, weil Tool-Namen frame-abhängig sind.

## VERBOTS-Pattern (MA-08, Stand 2026-04-24)

`input_fidelity="high"` für `gpt-image-2` ist **DEFUNCT**. Memory-Lesson `feedback_gpt_image_2_kein_input_fidelity` (2026-04-24): der Parameter wird mit `400 invalid_input_fidelity_model` abgelehnt. Nur bei `gpt-image-1.5` oder `gpt-image-1` verwendbar. Dieser Skill setzt den Parameter bei `gpt-image-2` NICHT. Wer extra hohe Referenz-Treue will, hebelt das über `quality="high"` plus sorgfältige Referenz-Slot-Wahl, nicht über `input_fidelity`.

## Personen aus dem Vault

Der Skill arbeitet mit dossier-basierten Personen. Beispiele aus dem Glossar (Schreibweise verbatim, mit Bindestrich und Wortgrenzen genau so):

- **Stefan Lehnisch** — Hauptanwender. Dossier-Datei `Dossier Stefan.md`.
- **Alexander Herter** — Duo-Partner. Dossier-Datei `Dossier Alexander Herter.md`. Achtung Transkriptions-Falle: nicht „Hertha".
- **Modern Emotions** — Duo-Gruppe Stefan plus Alexander. Gruppen-Dossier `Dossier Modern Emotions.md`.

Personen-spezifische Outfit-Details, Markenzeichen, Slot-Empfehlungen und Fotopool-Listen leben **ausschließlich** im jeweiligen Vault-Dossier, nicht in diesem Skill. Wave-G-Lesson „dynamisches Regelwerk" — der Skill liest zur Laufzeit, dupliziert nichts.

## Ablauf

### Schritt 1 — Auftrag klären

Wenn der Anwender sagt „generiere ein Bild von <Name> in <Szene>" reicht das als Startpunkt. Wenn die Beschreibung vage bleibt, eine einzige präzise Rückfrage:

- Welche **Person(en)** (Namen wie im Vault dokumentiert)?
- Welche **Szene** (Ort, Aktion, Stimmung, Tageszeit, Licht)?
- Welcher **Verwendungszweck** (bestimmt Aspect Ratio, Auflösung — siehe Schritt 6)?
- Welcher **Bildausschnitt** (Medium-Shot Default, Full-Body nur wenn Schuhe oder Pose Thema, Close-Up wenn Gesicht Thema)?

Nicht alle Details erfragen, wenn sie aus dem Kontext klar sind.

### Schritt 2 — Kontext laden

Immer laden:

1. Generisches Prinzip aus `{paths.bildgenerierung}/Authentische Personendarstellung.md` — die generische Methode.
2. Pro Person das **Dossier** aus `{paths.dossiers}/Dossier {name}.md`.
3. Bei Duo oder Gruppe zusätzlich das **Gruppen-Dossier**, falls vorhanden.

**Wenn ein Dossier zu einer Person fehlt:**

- Prüfen, ob unter `{paths.fotopool}/{person}/` ein Fotopool existiert.
- Wenn ja: anbieten, ein neues Dossier anzulegen (Character-Beschreibung aus den Fotos ableiten, Slot-1 vorschlagen, Referenzpool tabellieren). Erst nach Freigabe anlegen.
- Wenn nein: ehrlich melden, dass ohne Fotos und Dossier die Identität nicht zuverlässig reproduzierbar ist. Alternativen anbieten (generisches Bild ohne echte Person, oder Anwender lädt Fotos hoch).

### Schritt 3 — Engine und Bildmodus wählen

Zwei Entscheidungen per `AskUserQuestion`, wenn aus dem Kontext nicht eindeutig.

**Entscheidung A — welche Engine?**

> **Mit welcher Engine soll das Bild generiert werden?**
>
> 1. **Google Nano Banana (NB2 / NB Pro)** — über den Skill `nano-banana-image`. Stark bei Identitätstreue über mehrere Character-Slots, gutes Fine-Grained-Editing, günstig. Default für Portraits mit vielen Referenzen.
> 2. **OpenAI gpt-image-2** — über den Skill `openai-image-gen`. Stark bei Text-Rendering (Labels, Infografik-Inserts), Photorealismus, Layout-Planung vor dem Rendern, flexible Größen bis 2000 px. Multi-Reference-Komposition bis ca. 4 Bilder pro Call dokumentiert.
> 3. **Beide parallel** — gleicher Prompt, beide Engines. Zum Vergleich, wenn der Anwender zwischen beiden abwägen will.

Bei Zweifel Default: **Nano Banana** (mehr Charakter-Slots, mehr Referenzbilder, etablierte Qualität für Portraits). **gpt-image-2** picken, wenn lesbarer Text im Bild vorkommt (Speaker-Card mit Name, Cover mit Titel) oder eine ungewöhnliche Auflösung bis 2000 px Breite gebraucht wird.

**Entscheidung B — Bildmodus:**

> **Wie soll das Bild entstehen?**
>
> 1. **KI-generiert (Character-Referenz)** — Person wird vollständig neu erzeugt, Identität über Referenz-Slots. Hohe Gestaltungsfreiheit für Pose, Mimik, Szene. (Nano Banana: `--character`; gpt-image-2: `images.edit()` mit Liste der Referenzen)
> 2. **Originalfoto in Szene** — ein echtes Foto wird in eine neue Umgebung gesetzt. Identität perfekt, aber Pose und Blickrichtung an das Ausgangsfoto gebunden. (Nano Banana: `--input-image`; gpt-image-2: erstes Bild der Edit-Liste wird Basis)
> 3. **Beide Varianten** — zum Vergleich.

Bei mehreren Personen ist Weg 1 fast immer die richtige Wahl, da Weg 2 pro Person ein passendes Foto in passender Pose bräuchte.

### Schritt 4 — Referenzbilder zusammenstellen

Nach den Regeln aus dem Prinzip und den Dossiers:

**Pro Person (Weg 1):**

- **Slot 1 aus dem Dossier** (Pflicht-Identitätsanker, nie weglassen).
- **Slots 2 bis 4** aus der Slot-Empfehlungstabelle des Dossiers, passend zur Zielszenen-Stimmung. Alle vier Slots nutzen (bei Nano Banana). Bei gpt-image-2 bis zu 4 Referenzen pro Call — lieber 3 bis 4 starke Slots als viele schwache.
- **Face-Crops bevorzugen**, wenn im Dossier vermerkt. **Ausnahme Gemini:** Face-Crops bei Nano Banana instabil (still abgelehnt) — dort Originale nehmen.
- **Defekte Dateien überspringen** (siehe „Nicht verwenden" im jeweiligen Dossier).

**Bei Duo oder Gruppe:**

- **Nano Banana:** pro Person einen eigenen `--character`-Block. Optional ein bis zwei Gruppen-Fotos als `--object` (siehe Gruppen-Dossier). Limits **NB2: max. 4 Charaktere und zusammen max. 14 Referenzbilder**. **NB Pro: 5 Charaktere, max. 11 Bilder.**
- **gpt-image-2:** Referenzbilder als gemeinsame Liste an `images.edit()` reichen, kombinierter Prompt mit expliziten Namen pro Person. Bei Duo: pro Person 2 Slots plus ggf. 1 Gruppen-Foto = 5 Bilder total. Im Zweifel 4 pro Person nicht überschreiten.

**Originalfoto-Modus (Weg 2):**

- Foto aus `{paths.fotopool}/{person}/` picken, das Pose, Kleidung, Blickrichtung und Stimmung der Zielszene am besten trifft.
- Bei Unsicherheit dem Anwender 3 bis 4 Kandidaten zeigen und entscheiden lassen.

### Schritt 5 — Prompt bauen (Layer-Reihenfolge, Pflicht, nicht verhandelbar)

Reihenfolge ist fix:

1. **Generierungs-Trigger:** `Create a photorealistic image of...` (verhindert reine Textantworten).
2. **Identität pro Person** — Character-Beschreibung aus dem Dossier 1:1, kein Rephrasing.
3. **Outfit und Markenzeichen** aus dem Dossier (Detail-Regeln im Dossier, nicht hier).
4. **Szene, Pose, Licht, Stimmung** — das eigentliche Bildkonzept.
5. **LIGHTING INTEGRATION** — Pflicht-Block bei Szenen mit eigener Lichtstimmung (Bühne, Kerzenlicht, Goldene Stunde, Nacht, farbige Spots, Innenraum mit Fensterlicht, Konzert). Vorlage:

   > LIGHTING INTEGRATION: Re-light ALL subjects entirely with the scene's own lighting — [konkrete Lichtrichtung, Farben und Quellen benennen, z.B. „warm amber key light from upper-left stage spot, magenta rim light from right, slight atmospheric haze wrapping both faces"]. Do NOT carry over the clean studio lighting from the reference photos. Unified color grade and film grain across the entire frame including faces. Subjects fully embedded in the scene's atmosphere, no cut-out composite look.

   Hintergrund: Multi-Reference-Edits gewichten die Beleuchtung der Referenzen stark, um Identität zu sichern. Ohne diesen Block wirken Personen „reingesetzt" (Memory-Lesson `feedback_personen_reingesetzt_lichtintegration`). Bei rein neutralem Tageslicht-Kontext kann der Block entfallen.

6. **ABSOLUTE PRIORITY** am Ende:

   > ABSOLUTE PRIORITY: facial identity (jaw, eye shape and color, proportions, distinguishing features from the character description) must perfectly replicate the reference photos. Facial expression is free and should match the scene — identity stays, mimik adapts.

### Schritt 6 — Technische Einstellungen wählen

Standard-Mapping nach Verwendungszweck und Engine.

**Nano Banana (NB2 / NB Pro):**

| Verwendungszweck | Aspect Ratio | Auflösung | Thinking | Modell |
|---|---|---|---|---|
| LinkedIn-Thumbnail | 16:9 | 1K | high | NB2 |
| LinkedIn-Profilbild | 1:1 | 2K | high | NB Pro oder NB2 |
| Speaker-Card, Header-Bild | 16:9 oder 21:9 | 2K | high | NB Pro |
| Musikprojekt-Artwork (Cover) | 1:1 | 2K bis 4K | high | NB Pro |
| Musikprojekt-Promo-Foto | 16:9 oder 3:2 | 2K | high | NB2 oder NB Pro |
| Instagram-Post | 4:5 | 1K | minimal | NB2 |
| Story / Mobile | 9:16 | 1K | minimal | NB2 |
| Print | nach Format | 4K | high | NB Pro |
| Schnelle Vorschau | je nach Ziel | 512 oder 1K | minimal | NB2 |

Bei Personen **immer `thinking-level: high`** (Identitätstreue profitiert stark). Bei kritischen Bildern (wenige, müssen sitzen) 2K plus NB Pro erwägen.

**OpenAI gpt-image-2:**

| Verwendungszweck | Size | Quality | Hinweis |
|---|---|---|---|
| LinkedIn-Thumbnail | 1536x1024 | high | `quality="high"` setzen, kein `input_fidelity` |
| LinkedIn-Profilbild | 1024x1024 | high | Immer high bei Portraits |
| Speaker-Card mit Textinsert | 1536x1024 oder flex 2000xX | high | gpt-image-2-Stärke: Text im Bild |
| Musikprojekt-Artwork mit Titel | 1024x1024 | high | Titel verbatim in Quotes im Prompt |
| Musikprojekt-Promo-Foto | 1536x1024 | high | |
| Instagram-Post | 1024x1536 (etwa 4:5) | medium bis high | |
| Story / Mobile | 1024x1536 | medium | |
| Schnelle Vorschau | 1024x1024 | low | Für Prompt-Tests |

**Bei Portraits immer `quality="high"`.** Den Parameter `input_fidelity` NICHT bei `gpt-image-2` setzen (siehe VERBOTS-Pattern oben). Nur `gpt-image-1.5` oder `gpt-image-1` akzeptieren `input_fidelity="high"`.

### Schritt 7 — Generierungs-Vorschau (Engine-Skill übernimmt)

Übergib an den passenden Engine-Skill — **nicht direkt Python oder Bash starten**:

- **Engine = Nano Banana** → Skill `nano-banana-image`
- **Engine = OpenAI gpt-image-2** → Skill `openai-image-gen` mit Modell `gpt-image-2`, `images.edit()`-Endpoint und Liste der Referenzbilder. `quality="high"` setzen.
- **Engine = Beide parallel** → beide Skills nacheinander mit demselben Prompt aufrufen. Beide Ergebnisse in Schritt 8 gemeinsam reviewen.

Der jeweilige Skill zeigt selbst eine Vorschau mit Prompt, Einstellungen, Referenzen und Kosten. Erst nach Anwender-OK wird generiert.

Ausgabepfad:

- **Standard:** `{paths.output_default}/<beschreibender-dateiname>.png`.
- **LinkedIn-Kontext:** der aufrufende `linkedin-finalize`-Skill regelt den Pfad selbst (im jeweiligen Post-Ordner).
- **Projekt-Kontext:** wenn ein konkretes Projekt gemeint ist, nach `{paths.project_files}` oder in den zugehörigen Projektordner.

### Schritt 8a — Self-Review (Pflicht, BEVOR der User es sieht)

Claude prüft das Bild zuerst selbst, bevor der Anwender damit behelligt wird. Ziel: offensichtliche Identitätsabweichungen, Outfit-Fehler oder Szenen-Bugs früh erkennen, statt unnötig eine Runde Feedback zu kosten.

1. **Bild inline lesen** per Read-Tool.
2. **Slot-1-Referenz inline lesen** (Identitätsanker aus dem Dossier) — ggf. zusätzlich eine zweite frontale Referenz.
3. **Seite-an-Seite-Vergleich im Kopf** — Claude geht folgende Merkmale konkret durch:
   - **Gesichtsgeometrie:** Kiefer-Breite und -Form, Nasenlänge und -Profil, Augenabstand und -Form, Wangenknochen, Stirnhöhe. Stimmen die Proportionen?
   - **Person-spezifische Marker aus dem Dossier:** verifizieren wie im Dossier dokumentiert.
   - **Outfit und Markenzeichen:** alle Dossier-Pflichtteile korrekt (z.B. Brille, Bart-Linie, richtige Schuhe bei Full-Body)?
   - **Szene:** trifft das Konzept (Licht, Stimmung, Pose, Blickrichtung)?
4. **Urteil bilden** in einer von drei Kategorien. **Niemals** automatisch neu generieren — jede Neugenerierung kostet Geld und braucht Anwender-Freigabe.
   - **Solide Identität** — Identität sitzt, Outfit stimmt, Szene passt. → Weiter zu Schritt 8b mit positiver Einschätzung.
   - **Leichte Abweichung** — Erkennbar, aber ein Merkmal ist unscharf. → Weiter zu Schritt 8b. Bild zeigen, Abweichung konkret benennen, Formulierung: „Es gibt Abweichungen bei [X und Y]. Ist es für dich in Ordnung, oder soll ich ein neues generieren?"
   - **Klarer Fehltreffer** — Wirkt nicht wie die Person, wichtiges Markenzeichen fehlt, Outfit-Bug. → Weiter zu Schritt 8b. Bild trotzdem zeigen (Anwender soll sehen, was rauskam), Formulierung: „Leider ist das hier nichts geworden, [konkreter Grund]. Ich würde empfehlen, noch ein neues zu generieren. Soll ich das machen?" Erst nach Zustimmung neu generieren.
5. **Ehrlichkeit vor Harmonie.** Nicht schönreden. Wenn Claude selbst sieht, dass die Identität nicht sitzt, das auch sagen — der Anwender erkennt es ohnehin.

### Schritt 8b — User-Review

1. **Bild zeigen** (wurde in 8a bereits gelesen).
2. **Eigene Einschätzung voranstellen** (1 bis 2 Sätze, keine Predigt) — was passt, was ggf. nicht. Abweichungen konkret benennen, nicht vage.
3. **Abfrage per `AskUserQuestion`** — Formulierung passt zu 8a-Kategorie. Optionen:
   > - **Ja, übernehmen.**
   > - **Neu generieren mit Prompt-Anpassung** — konkreter Punkt.
   > - **Slot-Mix ändern** — andere Referenzen aus dem Dossier-Pool.
   > - **Modus wechseln** — von `--character` auf `--input-image` (oder umgekehrt).
4. **Gezielt nachjustieren**, nicht blind neu würfeln. Prompt-Änderungen konkret reinziehen, Rest gleich lassen.
5. **Iterations-Limit 2 bis 3 Runden.** Danach: Weg 2 (Originalfoto in Szene) als Rückfallweg vorschlagen. Ein echtes Foto in neuer Umgebung ist immer identisch, weil das Gesicht nicht neu erzeugt wird.

Erst nach Anwender-OK ist das Bild final.

### Schritt 9 — Übergabe

Gib dem Anwender zurück:

1. **Dateipfad** des finalen Bildes.
2. **Verwendeter Prompt** (kurz zitieren, damit der Anwender ihn bei Bedarf wiederverwenden kann).
3. **Verwendete Referenzbilder** (Liste, pro Person die Slot-Belegung).
4. **Einstellungen** (Modell, Auflösung, Aspect Ratio).

## Konfiguration

Die Pfade kommen aus `skill.config.yaml` (oder dem `vault_layout`-Block in `bundle.json`). Defaults sind in `skill.config.example.yaml` dokumentiert:

- `paths.bildgenerierung` — Basis-Ordner mit dem Prinzip „Authentische Personendarstellung" und allen Dossiers.
- `paths.dossiers` — Ordner mit den `Dossier {name}.md`-Dateien.
- `paths.fotopool` — Basis-Ordner mit Foto-Unterordnern pro Person.
- `paths.output_default` — Standard-Ausgabepfad für generierte Bilder.
- `paths.project_files` — Projekt-Datei-Pfad-Template, wenn ein Projekt-Kontext erkannt wurde.

Feature-Flags:

- `features.engine_default` — Standard-Engine, wenn der Anwender keine wählt (`nano-banana` oder `openai`).
- `features.iteration_limit` — Maximale Generierungs-Runden vor Rückfall-Vorschlag (Default 3).
- `features.lighting_integration_default` — Ob der LIGHTING-INTEGRATION-Block per Default in den Prompt eingebaut wird (Default `auto` — nur bei Szenen mit eigener Lichtstimmung).

## Hinweise zum Verhalten

- **Personen-Regeln nie hier duplizieren.** Sie leben ausschließlich in den Dossiers. Wenn der Anwender eine Regel ändert, ändert er das Dossier — dieser Skill übernimmt das automatisch beim nächsten Lauf.
- **Neue Person → neues Dossier.** Wenn der Anwender eine Person ins Spiel bringt, die im Vault noch kein Dossier hat, erst Dossier anlegen (nachfragen), dann Bild generieren.
- **Keine Vermutungen über Personen ohne Fotos.** Ohne Referenzpool keine authentische Generierung. In diesem Fall ehrlich sagen: „Ich kann Person X nicht zuverlässig erzeugen, es gibt keine Fotos im Vault."
- **Alle Vault-Regeln aus CLAUDE.md gelten** (Glossar-Pflicht bei Namen, Updated-Pflicht wenn Dossiers angepasst werden, Graph-Pflicht bei neuen Dossiers).
- **Dynamisches Regelwerk.** Dieser Skill dupliziert bewusst keine Inhaltsregeln aus Prinzip oder Dossiers. Alles kommt zur Laufzeit aus dem Vault.

## Sub-Skill-Konsum

- Engine A → Skill `nano-banana-image` (Foundation, `image`-Profil).
- Engine B → Skill `openai-image-gen` (Foundation, `image`-Profil).

Aufruf als String, kein Code-Coupling. Manifest-Deklaration `depends_on: [nano-banana-image, openai-image-gen]` haelt die Aktivierungs-Logik des Loaders synchron.

## Verknüpfungen

- `references/dossier-konvention.md` — Pointer auf die Vault-Dossier-Konvention.
- `skill.config.example.yaml` — Default-Pfade und Feature-Flags.
- Foundation-Skills: `nano-banana-image`, `openai-image-gen`.
