# 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 |