# Prompt-Inventar: Wo das System denken muss

**Zweck:** Jede Stelle im Ablauf, an der ein LLM eine Entscheidung treffen oder Inhalte erzeugen muss, bevor eine Action passiert. Für jede dieser Stellen wird später ein professioneller statischer Prompt geschrieben – hier geht es nur darum, **wo** sie gebraucht werden und was rein/raus geht.

**Grundregel:** Kein LLM, wo Code reicht. Elo-Mathematik, Schwellenwerte, Performance-Zahlen-Mapping sind deterministisch – die brauchen keinen Prompt (unten explizit markiert). Jeder unnötige LLM-Aufruf kostet Geld und Konsistenz.

> **Sprachregelung:** „Modell" = Asset (Person, Produkt, Kulisse, Logo). Das generierende KI-Modell heißt immer ausgeschrieben **„KI-Modell"** bzw. Seedance/Veo/Sora/Bildmodell. In den Zeilen zu P8 unten meint „Modell-Adapter" die KI-Modelle – historisch gewachsen, hier ausnahmsweise stehengelassen.

> **Hinweis zur Schreibweise der Outputs:** Einige Zeilen unten nennen noch Dateipfade (`attribute/`, `assets/`, `videos/video-XXXX.md`) aus der ursprünglichen Ordner-Denkweise. Verbindlich ist `datenbank-aufbau.md` – dort sind es Tabellenzeilen. Die Pfade sind als Lesehilfe stehengeblieben, nicht als Datenmodell.

---

## Architektur der Prompts: Statischer Kern + Injektions-Slots

Alle Prompts folgen demselben Bauprinzip:

```
[STATISCHER KERN]      – ändert sich nie, liegt im Dev-Modus
                         (z. B. Foto-Realismus-Regeln, Regie-Struktur)
[SLOT: REGELN]         – feste Brand-Regeln aus regeln/
[SLOT: ASSETS]         – freigegebene Versionen aus assets/ (Referenz-IDs)
[SLOT: ATTRIBUTE]      – Top-Attribute + deren Prompt-Bausteine aus attribute/
[SLOT: USER-INPUT]     – was der Nutzer diesmal will
```

Die zwei vorhandenen Prompts (P7, P8) sind bisher statisch – sie müssen auf dieses
Slot-System umgebaut werden, damit sie sich ihre Infos aus der Knowledge Base ziehen,
je nachdem, was der Benutzer haben möchte.

---

## Die Denk-Punkte im Ablauf

**Status-Legende:** ✅ vorhanden (anpassen) · 🆕 neu nötig · ⚙️ kein LLM – Code reicht · ❓ strittig, Entscheidung offen

> **Repo-Abgleich vom 28. Juli 2026** (Branch `prompts`, Ordner `prompts/`, Commit `a6b3a42f2a`)
>
> **Belegt vorhanden:** P1–P18 liegen als 22 Dateien vor (P8 = Kern + vier Adapter seedance/veo/sora/wan), geseedet über `scripts/seed-prompts.mjs` in `prompt_templates`, versioniert. Alle 22 haben Frontmatter im festgelegten Schema, einen Anti-Injection-Schlusssatz und – wo JSON ausgegeben wird – ein Schema mit „NUR dieses JSON".
>
> Die Status-Spalte unten ist entsprechend nachgezogen: Was im Repo steht, ist als vorhanden markiert. **Strittige Punkte sind mit ❓ gekennzeichnet und in `prompt-review.md` begründet; die Aufgaben dazu stehen in `prompt-plan.md`.** Sie sind hier bewusst NICHT als Beschluss eingetragen.

### A. Onboarding

| # | Denk-Punkt | Wann | Input | Output | Status |
|---|---|---|---|---|---|
| P1 | **Upload-Analyst** (Vision) | Nutzer lädt Logo, Produktbilder, Top-Ads hoch | Bilder/Videos der Uploads | Initiale Attribute + Asset-Kandidaten. **Asset-Enum im Repo: `gesicht\|produkt\|logo\|sonstiges` – `kulisse` fehlt** und muss zeitgleich mit dem DB-Enum ergänzt werden | ✅ vorhanden · Erweiterung nötig |
| P2 | **Profil-Übersetzer** | Nach den 6 Pflichtfragen | Antworten (Label, Produkt, **Nische**, Zielgruppe, 3 Worte, am Markt seit) | Brand-Profil + erste Stil-Attribute mit Startwerten (Scope: brand-weit, `folder_id = null`). **Die Nische wird nicht übersetzt** – sie ist eine Struktur-Angabe und wandert direkt nach `brands.nische` | ✅ vorhanden · **spricht im Repo noch von 5 Pflichtfragen**, muss auf 6 |

### B. Szene erstellen

| # | Denk-Punkt | Wann | Input | Output | Status |
|---|---|---|---|---|---|
| P3 | **Intent-Versteher** | Nutzer gibt Szenen-Prompt ein | User-Prompt | Was ist verlangt? Welche Kategorien sind relevant, welche hat der Nutzer explizit festgelegt (nicht überschreiben!)? | 🆕 |
| P4 | **Knowledge-Selector** | Direkt nach P3 | P3-Ergebnis + Kategorie-Scores **des gewählten Ordners** (`attribute_scores.folder_id`; null = brand-weit) | Welche Attribute/Assets werden injiziert: Top-Scores vs. explizite Nutzer-Wünsche vs. genau EIN Explorations-Slot. **Ein gewählter Ordner überschreibt die brand-weite Ebene vollständig – es wird nicht gemischt** | ✅ vorhanden, inkl. Explorations-Slot. ❓ Tiebreak bei Gleichstand geht im Repo an den höheren `used_count` – Umkehrung beschlossen, siehe `prompt-plan.md` §4.3. **Kennt den Ordner-Reifegrad noch nicht** |
| P5 | **Script-Autor** | Vor der Script-Anzeige | P4-Auswahl + User-Prompt | Das Script, das der Nutzer sieht und bestätigt | 🆕 (nutzt P8-Struktur) |
| P6 | **Script-Diff-Lerner** | Nutzer hat Script bearbeitet | Original-Script vs. editiertes Script | Was wurde geändert und was sagt das über die Vorlieben? → Lernsignal an betroffene Attribute | 🆕 |
| P7 | **Bild-Prompt-Generator** | Referenzbild-Generierung (Gesicht, Produkt, Szenen-Plate) | Statischer Kern (Foto-Realismus) + 5 Slots | Fertiger Bild-Prompt für **EIN** Bild | ✅ **Slot-Umbau erledigt** (5 Slots belegt). Setzt die Foto-Recherche wörtlich um: Verbot von „flawless"/„perfect skin"/„ultra realistic", doppelte Negativliste, Identity-Lock am Anfang UND Ende, Token-Locking, 4–6 Referenzbilder |
| P8 | **Video-Prompt-Generator** („Regie-Assistent") | Pro Video, pro Modell | Statischer Kern (10-Block-Regie-Struktur) + Slots + bestätigtes Script | Modellneutrale Shot-Struktur → Adapter → fertiger Video-Prompt | ✅ **Kern + vier Adapter vorhanden** (seedance/veo/sora/wan). ❓ Wortbudget des Seedance-Adapters (280–400) widerspricht der offiziellen Empfehlung (60–100) – siehe `prompt-plan.md` §4.1 |

### C. Nach der Generierung

| # | Denk-Punkt | Wann | Input | Output | Status |
|---|---|---|---|---|---|
| P9 | **Video-Analyst / Tagger** (Vision) – „Zwischen-Prompt für die Datenspeicherung" | Jedes generierte Video, vor der Anzeige | Video + verwendeter Prompt | Strukturierte Tags (Location, Farben, Voice, Geräusche, Texte, Handlungen) → `videos/video-XXXX.md`; prüft auch: Hat das Modell gemacht, was verlangt war? | 🆕 (deine Idee – bestätigt, das ist der wichtigste neue Prompt) |
| P10 | **Favorit-Vorhersager** | Vor der Auswahl-Anzeige | Tags aller Videos (P9) + Attribut-Scores | Welches Video kriegt die goldene Umrandung | ⚙️ überwiegend Code (Score-Summe) – LLM nur bei Gleichstand |
| P11 | **Vote-Attributierer** | Nach dem Vote | Gewinner-/Verlierer-Tags | Welche Merkmale unterschieden sich wirklich → nur die kriegen Elo-Punkte | 🆕 (Punktevergabe selbst: ⚙️ Code) |
| P12 | **Vergleichs-Analyst** | Nach dem Vote | .md-Inhalte der konkurrierenden Attribute | „Was hat X besser gemacht als Y" → Eintrag in beide Dateien; ggf. Vorschlag für Unter-Attribut (kaiserslautern--stadion) | 🆕 |
| P13 | **Frage-Generator** | Nach dem Vote (optional) | Unsicherste/wertvollste Attribut-Paare | Die eine gezielte Frage an den Owner („Welche Stadt war besser?") – welche Frage bringt am meisten Lernwert? | 🆕 |

### D. Knowledge-Base-Pflege

| # | Denk-Punkt | Wann | Input | Output | Status |
|---|---|---|---|---|---|
| P14 | **Details-Autor** | Wenn ein Attribut neue Erkenntnisse sammelt | Vergleiche, Performance-Daten, P12-Einträge | Aktualisiert Beschreibung / Was-es-ausmacht / Details inkl. Prompt-Bausteinen und Negativ-Prompts | 🆕 |
| P15 | **Kategorie-Wächter** | Wenn P9 einen Tag liefert, der in keine Kategorie passt | Neuer Tag + bestehende Kategorien | Neue Kategorie anlegen, Unter-Attribut oder in Bestehendes einsortieren? | 🆕 |
| – | Archivierung | Score unter Schwelle + lange inaktiv | Scores, Datum | Status „archiviert" | ⚙️ Code, kein Prompt |
| – | Elo-Updates, K-Faktor, Startwerte | jeder Vergleich | Zahlen | Zahlen | ⚙️ Code, kein Prompt |

### E. Verbessern

| # | Denk-Punkt | Wann | Input | Output | Status |
|---|---|---|---|---|---|
| P16 | **Referenz-Interpreter** (Vision) | Referenz-Upload beim Verbessern | Referenzbild + Pflichtfeld-Beschreibung | Exakt die benannten Merkmale extrahieren – und **nur** die (Regel: nie 1:1 kopieren) → Lock→Change→Scope-Block für P7 | ✅ vorhanden, inkl. Urheberrechts-Klausel und Altersverbot. **Kennt `kulisse` nicht** – „Hintergrund" gilt dort nur als zu ignorierendes Bildelement |
| P17 | **Versions-Chronist** | Neue Asset-Version gewählt | Alt vs. Neu + Änderungsgrund | Eintrag in die Versionskette (v3 → v4: was, warum, Gewinner) | 🆕 (klein, Template-nah) |

### F. Bild-Modus, Feed & Ordner

*Konzept: `konzept-bilder-feed.md`. Der Bild-Modus ist entkoppelt – kein Wettbewerb mehrerer KI-Modelle, ein festes Bildmodell, kein Vote-Loop.*

| # | Denk-Punkt | Wann | Input | Output | Status |
|---|---|---|---|---|---|
| P19 | **Slot-Analyst** („Rezept lesbar machen") | Nutzer öffnet einen fremden Post im Feed | `posts.prompt_sent` des Originals + dessen Tags | Die vereinfachte Chip-Darstellung (`slot_summary`): Kulisse, Modelle, Licht, Kamera, Farbe – **als Abstraktion, nie im Wortlaut**. Das ist die Grenze zwischen „kopierbar" und „Betriebsgeheimnis offengelegt" | 🆕 |
| P20 | **Ordner-Vorschlag** | Nutzer speichert einen Post (eigen oder fremd) | Post-Tags + bestehende Ordner der Brand (Name + `theme_md`) | Passenden Ordner vorschlagen **oder** einen neuen mit Theme-Beschreibung anbieten. Der Nutzer bestätigt – nie automatisch einsortieren | 🆕 |
| P21 | **Werbetext-Autor** | Beim Kopieren | Werbetext des Originals (nur als **Stilvorlage**) + eigenes Produkt + Brand-Profil | Neuer Werbetext im Stil des Originals, inhaltlich aufs eigene Produkt. Der fremde Text wird **nie** übernommen – sonst wandern fremde Claims und Markennennungen ungeprüft in den eigenen Post | 🆕 |
| P22 | **Bild-Analyst / Tagger** (Vision) | Jedes generierte Bild | Bild + verwendeter Prompt | Strukturierte Tags → `post_images.tags`, Compliance-Abgleich, Qualitätsdefekte, erkanntes Format und Winkel. **Enum-Zwang wie bei P9** + Code-Validator | 🆕 – **keine abgespeckte Kopie von P9.** Rund die Hälfte von P9s Schema (voice, geraeusche, start_s/end_s, Timestamps) ist auf Bilder nicht anwendbar |
| P23 | **Ketten-Regisseur** | Post-Generierung mit mehr als einem Bild | Gefüllte Post-Slots, Format, Kettenlänge | n Bild-Prompts – Person, Produkt, Kulisse, Licht und Farbe **wörtlich identisch**, es variiert nur Winkel **oder** Position | 🆕 – **war bisher nicht im Inventar.** Aufsatz über P7, kein Ersatz. Die Ketten-Konsistenz ist der schwierigste Teil des Bild-Modus |
| – | Nischen- und Typ-Tag-Vergabe | Modell wird angelegt | Modell + Referenzbilder | feste Enum-Werte | ⚙️ **bewusst kein freier LLM-Call** – P22-Vision schlägt nur aus der festen Liste vor, der Code validiert. Ohne Enum-Zwang driften die Kategorien und die Slot-Kompatibilität wird wertlos |
| – | Feed-Score | stündlich | Views, Likes, Kopien, Social-Reichweite | gewichtete Summe + Zeit-Decay | ⚙️ Code, kein Prompt. **Und kein Elo** – hier duelliert nichts, hier wird summiert |
| – | Ordner-Initialisierung | Ordner wird angelegt | `startwert_modus` | Startwerte in `attribute_scores` | ⚙️ Code, kein Prompt |

> **P19 ist der heikelste neue Prompt.** Er entscheidet, wie viel vom Original sichtbar wird. Zu wenig Abstraktion = die Knowledge Base fremder Brands wandert nach außen. Zu viel = der Kopierer versteht das Rezept nicht und das Feature ist wertlos. Der Anti-Injection-Satz gehört hier zwingend rein: P19 ist die **einzige Stelle im System, an der Nutzerinhalte zwischen Mandanten fließen**.

> **Korrektur zum bisherigen Stand:** Dieses Dokument hat P7 als „✅ vorhanden – auf Slots umbauen" geführt und in den Bild-MVP-Pfad gesetzt. Das war in beide Richtungen falsch. Der Slot-Umbau ist **erledigt**; dafür ist P7 laut eigenem Rollensatz ein **Referenzbild-Generator für die Video-Pipeline** – er erzeugt genau ein Bild, verbietet Seitenverhältnisse ausdrücklich („Kein Seitenverhältnis in den Prompt schreiben"), verbietet Text im Bild („no text, no logos") und kennt keine Bilderkette. Der Bild-MVP braucht deshalb **P23** zusätzlich. Begründung: `prompt-review.md` §4.

### G. Performance & Reporting

| # | Denk-Punkt | Wann | Input | Output | Status |
|---|---|---|---|---|---|
| – | Performance → Elo | Ad-Daten kommen rein | CTR, Thumbstop, ROAS | Score-Updates (×2 gewichtet) | ⚙️ Code, kein Prompt |
| P18 | **Insight-Reporter** | Fürs Brand-Dashboard | Scores, Logs, Performance | Verständliche Erklärung für den Owner: „Warum performen deine Videos – und was probieren wir als Nächstes" | 🆕 (V2, nice-to-have) |

---

## Zusammenfassung

- **23 Denk-Punkte** (P1–P23): **18 liegen im Repo** (P1–P18, davon P8 als Familie mit fünf Dateien = 22 Templates), **5 fehlen** (P19–P23), 1 davon überwiegend Code (P10, LLM nur bei Gleichstand).
- **6 Stellen bewusst ganz OHNE LLM** (Elo-Mathe, Archivierung, Performance-Mapping, Feed-Score, Ordner-Initialisierung, Nischen-/Typ-Tag-Validierung) – deterministischer Code ist dort billiger und konsistenter. P10 zählt hier **nicht** mit, weil er im Gleichstandsfall doch ein LLM braucht.
- **Zwei kritische Pfade**, weil es zwei Produktteile gibt:
  - **Video-MVP:** P3, P4, P5, P8, P9, P11 – alle sechs liegen vor, es fehlt die Verdrahtung.
  - **Bild-MVP:** **P7 (erweitern) + P23 (neu) + P22 (neu) + P19 + P21.** Drei Neuentwicklungen, nicht ein Umbau. P20 ist nachrüstbar – ohne ihn sortiert der Nutzer von Hand.
- **Teuerste Prompts** (Vision, pro Ausgabe): P9 Video-Analyst bei 1.000 Videos/Monat. **P22 Bild-Analyst wird ihn überholen**, sobald der Bild-Modus läuft – Bilder sind billig, es werden also viel mehr. Kostenrechnung entsprechend nachziehen (`projekt-uebersicht.md` §9 rechnet nur mit Video). Für P9 sind `media_resolution: low` + 1 FPS **nirgends gesetzt** – gehört in den Job-Dispatcher, nicht in den Prompt.
- P8 ist eine Familie: ein Regie-Kern + vier Adapter (seedance, veo, sora, wan). **P7 braucht keine Adapter-Familie** – im Bild-Modus läuft nur ein festes KI-Modell.
- **P4 arbeitet scope-bewusst:** Er zieht die Top-Attribute aus `attribute_scores` der gewählten `folder_id`, nicht brand-weit. Ohne Ordner bleibt es beim brand-weiten Verhalten. Den **Reifegrad** des Scopes kennt er noch nicht – bei vier Posts im Ordner ist „höchster Score" Rauschen.

### Strittig, noch nicht entschieden (❓)

| Punkt | Stand im Repo | Wo begründet |
|---|---|---|
| Seedance-Wortbudget | 280–400 Wörter; offizielle Empfehlung ist 60–100 | `prompt-plan.md` §4.1 |
| Trägt die 10-Block-Struktur bei Seedance? | Die gesamte P8-Architektur setzt es voraus | `prompt-plan.md` §9 |
| Identity-Lock am Prompt-Ende | in P7 vorhanden, in keinem P8-Adapter | `prompt-review.md` §5 Nr. 7 |
| Verbotslisten der vier Adapter | uneinheitlich; Seedance ohne Marken-/Personennamen-Verbot, alle vier ohne Altersverbot | `prompt-review.md` §3.2 |
| Kosmetik-Few-Shots in P5 | unverändert, obwohl P7/P8 entbrancht wurden | `prompt-review.md` §3.1 |
| `{{NISCHE}}` als Slot | existiert nicht – Branche wurde ersatzlos gestrichen | `prompt-plan.md` §5 C1 |
