From a6b3a42f2ac16c498f1bfe68a3b1f23f32b0f198 Mon Sep 17 00:00:00 2001 From: JUSN Date: Tue, 21 Jul 2026 09:01:45 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20Branchen-Lock=20aus=20P7/P8=20entfernen,?= =?UTF-8?q?=20Verbotslisten=20angleichen,=20Doku-L=C3=BCcken=20schlie?= =?UTF-8?q?=C3=9Fen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Hintergrund: Review aller 22 Prompt-Templates (P1-P18 + P8-Adapter) auf Konsistenz. BrandLoop ist als branchenneutrales Multi-Tenant-System angelegt (README: "Team-Permission der jeweiligen Brand") - vier Stellen wichen davon ab oder waren nur implizit dokumentiert. 1. Branchen-Lock entfernt (P07-bild-prompt-generator.md, P08-video-kern.md) Beide öffneten mit "... einer Werbe-Produktion fuer Kosmetik-Brands." Einzige Branchen-Festlegung im gesamten Prompt-Set - alle anderen 20 Dateien, das DB-Schema und die Quelldokumente (docs/banana-pro-director-2.0.md) sind branchenneutral. Vermutlich ein Rest aus einer Kosmetik-Beispieldomäne beim urspruenglichen Schreiben. Zusaetzlich in P07 "Flakons" (Kosmetik-/ Parfuembegriff) durch "Behaeltern" ersetzt, damit die Anleitung fuer transparente Fluessigkeiten branchenunabhaengig bleibt (Getraenke, Reinigungsprodukte etc., nicht nur Parfuem/Serum). 2. Altersbezeichnungen-Verbot auf die Vision-/Merkmal-Quellen ausgeweitet (P01-upload-analyst.md, P16-referenz-interpreter.md) P07/P08/alle vier Adapter verbieten Altersbezeichnungen im Output - aber P01 und P16 sind die Stellen, die die `merkmale`-Texte ERZEUGEN, welche per Token-Locking spaeter woertlich in genau diese Prompts uebernommen werden (P01 Regel 6: "sie werden spaeter exakt so in Prompts eingesetzt"). Ohne das Verbot an der Quelle haette sich eine Altersbezeichnung durch die ganze Kette bis in den finalen Bild-/Video-Prompt durchschmuggeln koennen, wo sie eigentlich untersagt ist. 3. Tiebreak-Regel fuer exakten Score-Gleichstand (P04-knowledge-selector.md) Regel 2 sagte bereits, wie ein Unter-Attribut ein Eltern-Attribut bei hoeherem Score schlaegt, aber nicht, was bei einem exakten Gleichstand zwischen zwei Attributen der gleichen Ebene passiert (anders als bei Video-Gleichstand, wo P10 explizit dafuer existiert). Ergaenzt: bei exaktem Gleichstand gewinnt das mit dem hoeheren `used_count` (das breiter getestete Attribut) - vermeidet, dass diese Randfaelle zufaellig/uneinheitlich im Code gehandhabt werden. 4. Zwei bisher nur implizite Konzepte in prompts/README.md dokumentiert: - "Die 8 Grundkategorien": P15 erwaehnt "die 8 Grundkategorien" als feststehenden Begriff, ohne sie je aufzulisten - bisher nur aus den JSON-Schema-Keys von P09 rekonstruierbar (location, licht, farben, kamera, voice, geraeusche, texte_hooks, handlungen). Jetzt als eigene Tabelle festgehalten, da praktisch jeder Prompt darauf aufbaut. - "Script-Felder <-> Kategorien": P05 gibt Shots in sechs Feldern aus (Bild/Aktion/Kamera/Licht/Audio/Text im Bild), die nicht 1:1 den acht Kategorie-Slugs entsprechen (z.B. buendelt "Audio" voice+geraeusche, "Bild" buendelt location+farben). Diese Zuordnung war nirgends schriftlich festgehalten, obwohl Code, der Script-Inhalte spaeter Kategorien zuordnen muss (z.B. fuer P6-Diffs), sie braucht. Kein Prompt-Body enthaelt neue Erklaer-Kommentare - die Bodies werden woertlich an die KI-Modelle geschickt (static_core_md), Meta-Kommentare darin wuerden mit in den Prompt wandern. Die Begruendungen stehen daher ausschliesslich hier in der Commit-Message und in prompts/README.md (reine Doku, wird nicht geseedet). Co-Authored-By: Claude Sonnet 5 --- prompts/P01-upload-analyst.md | 2 +- prompts/P04-knowledge-selector.md | 2 +- prompts/P07-bild-prompt-generator.md | 4 ++-- prompts/P08-video-kern.md | 2 +- prompts/P16-referenz-interpreter.md | 1 + prompts/README.md | 31 ++++++++++++++++++++++++++++ 6 files changed, 37 insertions(+), 5 deletions(-) diff --git a/prompts/P01-upload-analyst.md b/prompts/P01-upload-analyst.md index 4f55e76..9b2f7d1 100644 --- a/prompts/P01-upload-analyst.md +++ b/prompts/P01-upload-analyst.md @@ -16,7 +16,7 @@ Du bist der Vision-Analyst des Onboardings. Der Nutzer hat Logo, Produktbilder u 4. Pro Attribut: prägnanter deutscher Name, URL-tauglicher `slug` (kleinbuchstaben-mit-bindestrichen), 2–5 `tags`, eine kurze deutsche `beschreibung` (1–3 Sätze: was ist das, wie wirkt es für DIESE Brand), 1–3 englische `prompt_bausteine` (direkt in Bild-/Video-Prompts einsetzbar, z. B. "warm sandstone tones, golden hour side light") und optional englische `negativ_prompts`. Dazu `quelle`: welcher Upload die Beobachtung belegt. 5. Wiederkehrendes vor Einmaligem: Ein Attribut nur vorschlagen, wenn es die Brand erkennbar prägt (in mehreren Uploads oder dominant in einem zentralen). Maximal 12 Attribute insgesamt. 6. Asset-Kandidaten: wiederkehrende Gesichter, Produkte und das Logo als `assets` mit `typ` (gesicht/produkt/logo/sonstiges), Name, sichtbaren `merkmale` (präzise, wörtlich wiederverwendbar formuliert — sie werden später exakt so in Prompts eingesetzt) und `quelle`. Bei Gesichtern zusätzlich `einwilligung_noetig: true`. -7. Keine echten Personennamen, keine Fremd-Markennamen in Namen/Tags/Bausteinen. Startwerte/Scores vergibst du NICHT — das macht der Code. +7. Keine echten Personennamen, keine Fremd-Markennamen, keine Altersbezeichnungen — weder in Namen/Tags/Bausteinen noch in `merkmale`. Startwerte/Scores vergibst du NICHT — das macht der Code. 8. Sprache: Deutsch, außer `prompt_bausteine`/`negativ_prompts` (Englisch). ## Output (NUR dieses JSON, keine Erklärungen) diff --git a/prompts/P04-knowledge-selector.md b/prompts/P04-knowledge-selector.md index a2f4f13..7ffc8ea 100644 --- a/prompts/P04-knowledge-selector.md +++ b/prompts/P04-knowledge-selector.md @@ -11,7 +11,7 @@ Du bist der Knowledge-Selector. Auf Basis des verstandenen Intents wählst du au ## Auswahl-Regeln (in dieser Rangfolge) 1. **Fixierte Nutzerwünsche schlagen alles.** Für jede in {{INTENT}} fixierte Kategorie: das Attribut wählen, das dem Nutzerwunsch entspricht (existiert keins → `neu_anlegen: true` mit Name/Slug-Vorschlag). Auch wenn sein Score niedrig ist. Grund: `"fixiert"`. -2. **Offene relevante Kategorien:** das Attribut mit dem höchsten Score wählen, Status aktiv. Grund: `"top"`. Existiert ein Unter-Attribut mit höherem Score als sein Eltern-Attribut, das Unter-Attribut nehmen. +2. **Offene relevante Kategorien:** das Attribut mit dem höchsten Score wählen, Status aktiv. Grund: `"top"`. Existiert ein Unter-Attribut mit höherem Score als sein Eltern-Attribut, das Unter-Attribut nehmen. Bei exaktem Gleichstand zwischen zwei Attributen bleibt das mit dem höheren `used_count` vorn (breiter getestet). 3. **Genau EIN Explorations-Slot pro Szene:** In einer offenen (nie einer fixierten) Kategorie statt des Top-Attributs bewusst ein ungetestetes oder wenig genutztes wählen (niedriger `used_count`, lange nicht verwendet, oder frische Onboarding-Hypothese). Grund: `"exploration"` + kurze Begründung. Ohne Exploration lernt das System nichts Neues. Wähle dafür die Kategorie, in der neues Wissen aktuell am wertvollsten ist (viele ungetestete Einträge, enge Score-Abstände). Gibt es nirgends Ungetestetes → Explorations-Slot weglassen. 4. **Assets:** Aus {{ASSETS}} die freigegebenen Versionen wählen, die {{INTENT}}.`genannte_elemente` abdecken (genanntes Produkt → dessen Asset; Person gefordert → Brand-Gesicht). Nur freigegebene Versionen, exakt mit Versions-ID. 5. **Fokus:** Maximal 6–8 Attribute gesamt. Nicht jede Kategorie erzwingen — nur was die Szene laut Intent braucht. Für jedes gewählte Attribut die `prompt_bausteine`/`negativ_prompts` mitgeben (wörtlich aus {{ATTRIBUTE}}). diff --git a/prompts/P07-bild-prompt-generator.md b/prompts/P07-bild-prompt-generator.md index 7a1c6bd..8e542b5 100644 --- a/prompts/P07-bild-prompt-generator.md +++ b/prompts/P07-bild-prompt-generator.md @@ -6,7 +6,7 @@ modell_hinweis: claude aktiv: true --- -Du bist der Bild-Prompt-Regisseur einer Werbe-Produktion für Kosmetik-Brands. Du übersetzt einen Auftrag plus das injizierte Brand-Wissen in EINEN fertigen englischen Bild-Prompt für ein Foto-Generierungsmodell — für Referenzbilder von Gesichtern, Produkten und Szenen-Plates, die später in Videogenerierungen verwendet werden. +Du bist der Bild-Prompt-Regisseur einer Werbe-Produktion. Du übersetzt einen Auftrag plus das injizierte Brand-Wissen in EINEN fertigen englischen Bild-Prompt für ein Foto-Generierungsmodell — für Referenzbilder von Gesichtern, Produkten und Szenen-Plates, die später in Videogenerierungen verwendet werden. ## Grundphilosophie @@ -15,7 +15,7 @@ Jedes Bild muss wie eine echte Fotografie lesen — echte Kamera, echtes Licht, ## Auftragstypen (wähle anhand des Auftrags) 1. **Gesicht neu (Face-Lock):** Identität pur — mid-gray seamless, Baseline-Top (plain black thin-strap camisole für Frauen, plain black ribbed tank für Männer), kein Schmuck, kein Styling, 3:4-Headshot, neutral entspannter Ausdruck. Nur Identitätsmerkmale beschreiben. -2. **Produkt-Hero:** Produkt auf ruhiger Fläche, weiches gerichtetes Fensterlicht, scharfer Fokus aufs Produkt. Bei transparenten Flakons/Flüssigkeiten immer: "meniscus, refraction, liquid clarity". Immer: "no text, no logos" (Label-Text kommt aus dem freigegebenen Asset, nie generiert). +2. **Produkt-Hero:** Produkt auf ruhiger Fläche, weiches gerichtetes Fensterlicht, scharfer Fokus aufs Produkt. Bei transparenten Behältern/Flüssigkeiten immer: "meniscus, refraction, liquid clarity". Immer: "no text, no logos" (Label-Text kommt aus dem freigegebenen Asset, nie generiert). 3. **Asset-Verbesserung:** Es existiert eine freigegebene Version als Referenz. Baue den Prompt nach **Lock → Change → Scope**: erst was identisch bleibt, dann die EINE Änderung, dann der Geltungsbereich ("edit X only"). Liegt ein Anweisungsblock aus der Referenz-Analyse vor ({{ANWEISUNGEN}}), übernimm dessen Lock/Change/Scope wörtlich. 4. **Szenen-Plate:** Charakter(e) in realer Umgebung oder reine Umgebung. Fünf Prosa-Absätze: Eröffnung (Framing, Kamera, Stimmung) → Charakter → Welt/Atmosphäre → Fokus-Anker → Kamera-Spezifikation mit Realismus-Schluss. Positionen als Prosa ("anchored on the left third"), nie Koordinaten. diff --git a/prompts/P08-video-kern.md b/prompts/P08-video-kern.md index 51b1431..0eeaa7f 100644 --- a/prompts/P08-video-kern.md +++ b/prompts/P08-video-kern.md @@ -6,7 +6,7 @@ modell_hinweis: claude aktiv: true --- -Du bist der Regie-Assistent einer Werbe-Produktion für Kosmetik-Brands. Du übersetzt das vom Nutzer bestätigte Script in EINE modellneutrale, englische Shot-Struktur — ein Produktionsdokument, das anschließend von Modell-Adaptern in den Dialekt des jeweiligen Videomodells übersetzt wird. Du veränderst die Absicht des Scripts nie, du strukturierst und präzisierst sie. +Du bist der Regie-Assistent einer Werbe-Produktion. Du übersetzt das vom Nutzer bestätigte Script in EINE modellneutrale, englische Shot-Struktur — ein Produktionsdokument, das anschließend von Modell-Adaptern in den Dialekt des jeweiligen Videomodells übersetzt wird. Du veränderst die Absicht des Scripts nie, du strukturierst und präzisierst sie. ## Grundphilosophie diff --git a/prompts/P16-referenz-interpreter.md b/prompts/P16-referenz-interpreter.md index ebfaa6c..2d00d7b 100644 --- a/prompts/P16-referenz-interpreter.md +++ b/prompts/P16-referenz-interpreter.md @@ -16,6 +16,7 @@ Du bist der Referenz-Interpreter. Beim Verbessern eines Assets hat der Nutzer ei 4. Enthält das Bild ein erkennbares echtes Gesicht und der Nutzer will Gesichtsmerkmale übernehmen → `einwilligung_hinweis: true` (die App klärt die dokumentierte Einwilligung; rein KI-generierte Gesichter sind der Standard). 5. Erkennbare Logos, Markennamen oder geschützte Designs benennst du generisch und nimmst sie NICHT in die Merkmale auf, auch wenn der Nutzer sie nennt — stattdessen Hinweis in `hinweise`. 6. **Anweisungsblock** für den Bild-Prompt-Generator nach Lock → Change → Scope, englisch, direkt einsetzbar. Lock: was am bestehenden Asset (siehe {{ASSETS}}) unverändert bleibt. Change: die extrahierten Merkmale als Änderung. Scope: worauf sich die Änderung beschränkt. Muster: „Keep face, identity, skin tone, and body unchanged. Change only the hairstyle: soft shoulder-length layered cut with curtain bangs, warm chestnut brown. Edit hair only." +7. Keine echten Personennamen, keine Altersbezeichnungen in den Beschreibungen — Personen nur über visuelle Merkmale (analog P7/P8). ## Output (NUR dieses JSON) diff --git a/prompts/README.md b/prompts/README.md index 010ed76..8c58b41 100644 --- a/prompts/README.md +++ b/prompts/README.md @@ -43,6 +43,23 @@ aktiv: true `version` vergibt das Seed-Skript: neue Zeile bei Inhaltsänderung (version+1), alte Zeilen werden `aktiv: false`. +## Die 8 Grundkategorien + +Jede Brand startet mit denselben 8 Kategorien (das ist die Grundlage von `{{KATEGORIEN}}` überall +und der Enum-Felder in P9). Neue Kategorien entstehen nur über P15 (`neue_kategorie`) — absolute +Ausnahme, siehe dort. + +| Slug | Inhalt | +|---|---| +| `location` | Drehort/Umgebung, innen/außen, Tageszeit | +| `licht` | Lichtstimmung, Lichtrichtung | +| `farben` | Farbwelt, dominante Farben, Farbstimmung | +| `kamera` | Shot-Typen, Kamerabewegung | +| `voice` | Sprache/Stimme, Sprecher-Typ | +| `geraeusche` | Musik, Sound-Effekte | +| `texte_hooks` | Eingeblendeter Text, Hooks, CTAs | +| `handlungen` | Aktionen/Handlungen im Bild | + ## Slot-Registry | Slot | Inhalt (füllt der Code) | genutzt von | @@ -74,6 +91,20 @@ Zeilen werden `aktiv: false`. \* P2 erzeugt das Brand-Profil, nutzt aber `BRAND_PROFIL` nicht als Input. +## Script-Felder ↔ Kategorien (P5) + +P5 gibt Shots in sechs Feldern aus, die sich wie folgt auf die 8 Grundkategorien beziehen — relevant +für Code, der Script-Inhalte den Kategorien zuordnen muss (z. B. P6-Diff-Zuordnung): + +| Script-Feld | Kategorie(n) | +|---|---| +| Bild | `location`, `farben` | +| Aktion | `handlungen` | +| Kamera | `kamera` | +| Licht | `licht` | +| Audio | `voice`, `geraeusche` | +| Text im Bild | `texte_hooks` | + ## Pipeline-Überblick ```