bilder gen
This commit is contained in:
@@ -118,11 +118,58 @@ Jede Etappe hat ein Abnahmekriterium – etwas, das man vorführen kann. Ohne da
|
||||
**Abnahme:** Nach dem Onboarding stehen in `brands` sechs ausgefüllte Felder und in `attribute_scores` die ersten Attribute auf der brand-weiten Ebene (`folder_id = null`).
|
||||
**Aufwand:** mittel.
|
||||
|
||||
### E4 · Modelle 🟡 **Kern steht (14.08.2026), Verbessern-Strecke offen**
|
||||
### E4 · Modelle ✅ **Generierung steht (15.08.2026), Verbessern-Strecke offen**
|
||||
|
||||
**Modell generieren ist gebaut.** Anlegen erzeugt für Person, Produkt und Kulisse je **vier Entwurfs-Versionen** plus vier `modell_gen`-Jobs; freigegeben wird nichts, bis der Nutzer im Ergebnis-Screen eine Variante wählt. Die übrigen werden **archiviert, nicht gelöscht**, und `won_against_version_id` hält fest, wogegen sich die Siegerin durchgesetzt hat.
|
||||
|
||||
Prompt je Typ mit Identity-Lock am Anfang **und** am Ende, `merkmale` wörtlich, nur der Blickwinkel variiert über die vier Varianten. Der Studio-Block ist wörtlich aus P07 übernommen, wie es dort verlangt wird. Gesichter entstehen im 3:4-Headshot, Produkte und Kulissen quadratisch.
|
||||
|
||||
**Logos: zwei Wege, die sich ausschließen.** Die Brand-Regel schützt ein *vorhandenes* Markenzeichen davor, verzerrt, beschnitten, umgefärbt oder neu interpretiert zu werden. Eine Marke ohne Logo hat nichts zu schützen. Daraus:
|
||||
|
||||
- **Datei hochgeladen** → wird v1 und sofort freigegeben, ab da nie wieder generiert.
|
||||
- **Keine Datei, nur Beschreibung** → vier Entwürfe. Es gibt kein Original, das verfremdet werden könnte.
|
||||
- **Ist einmal etwas freigegeben, ist Schluss.** Der Dispatcher weist jeden weiteren `modell_gen`-Job auf dieses Asset ab – geprüft: „Dieses Logo ist bereits freigegeben und wird laut Brand-Regel nicht neu generiert."
|
||||
|
||||
Beim Logo-Entwurf entfallen die globalen Regeln und der Schlusssatz „No text, no logo, no watermark" – beide wären widersinnig, wenn genau ein Schriftzug entstehen soll.
|
||||
|
||||
**KI-Kennzeichnung** sitzt an jeder erzeugten Kachel (EU AI Act, §10).
|
||||
|
||||
Durchgespielt über die Oberfläche: Kulisse „Badezimmer, Morgenlicht" ohne Referenzbild angelegt → 4 Varianten erzeugt → v2 freigegeben, v1/v3/v4 archiviert. Fehlerpfad mit `ark` geprüft: Variante bleibt `entwurf`, der Screen zeigt „fehlgeschlagen" mit der Anbieter-Meldung und einen Knopf „Nochmal"; nach dem Wiederholen war die Variante da.
|
||||
|
||||
> **Drei Fehler, die ein paralleler Prüflauf über `prompts/` gefunden hat:** der Kulissen-Prompt hatte keine Schluss-Klammer (die vier Varianten wären auseinandergedriftet); ein gescheiterter Job hat die Version auf `archiviert` gesetzt und damit „vom Nutzer verworfen" mit „Generierung kaputt" verwechselt; und der Dispatcher hat `limit` **vor** dem Statusfilter angewendet – bei gefüllter `jobs`-Tabelle hätte er wartende Jobs irgendwann nie mehr gefunden. Alle drei behoben.
|
||||
|
||||
### E4 · Grundlage 🟡 **Kern steht (14.08.2026), Verbessern-Strecke offen**
|
||||
**Inhalt:** Modell anlegen (Person, Produkt, **Kulisse**), echte Referenzbild-Uploads, Versionierung mit Release-Prinzip, Modelle-Übersicht im Profil.
|
||||
**Erledigt:** Anlegen mit Typwahl und Mehrfach-Bildauswahl (`modell/neu`), Upload nach `asset-references` mit Team-Rechten, Version 1 wird angelegt und sofort freigegeben, `assets.released_version_id` zeigt darauf. Übersicht im Profil nach Typ gruppiert, mit Titelbild aus der freigegebenen Version.
|
||||
**Belegt:** Vier Modelle (2 Produkte, 2 Kulissen) über `scripts/seed-demo.mjs` als **Client** angelegt – das beweist nebenbei, dass die Tabellen- und Bucket-Rechte aus E2 ausreichen. Alle vier Bilder laden in der App in Originalgröße.
|
||||
**Offen:** weitere Versionen anlegen und freigeben (Verbessern-Strecke), `merkmale` als Token-Lock, Einwilligungs-Upload für Personen.
|
||||
**P7 ist verdrahtet.** Der Dispatcher lädt die aktive P7-Zeile aus `prompt_templates`, füllt die fünf Slots (`USER_PROMPT`, `REGELN`, `ASSETS`, `ATTRIBUTE`, `ANWEISUNGEN` – leere bekommen das Literal `(leer)`) und lässt P7 den englischen Bild-Prompt schreiben. Geprüft: alle fünf Platzhalter werden befüllt, keiner bleibt stehen. Bei Erfolg wird `jobs.prompt_template_version` mitgeschrieben – sonst wäre später nicht rekonstruierbar, welche Prompt-Fassung ein Bild erzeugt hat.
|
||||
|
||||
Ist kein LLM erreichbar (heute: kein OpenRouter-Guthaben), greift der deterministische Zusammenbau als **Notlauf** und meldet das im Log. Die Kette läuft damit auch ohne Guthaben, nur mit dem einfacheren Prompt. Der Job hält in `prompt_sent` fest, was wirklich rausging.
|
||||
|
||||
**Referenzbilder gehen als Bild-Eingabe mit.** P7 verlangt es so: bei vorhandener Referenz die Person nicht neu beschreiben, sondern nur einen kurzen visuellen Anker setzen. Der Dispatcher lädt dafür das Bild der **freigegebenen** Version jedes belegten Slots und hängt es an – bei OpenRouter als `image_url`, bei Ark als `image[]`. Höchstens vier, weil mehr die Merkmale mittelt statt sie zu schärfen (§8).
|
||||
|
||||
**Wirkung, im direkten Vergleich geprüft:** Vorher war die Person im Werbebild nur „eine blonde Frau" und die Kulisse ein ähnliches Badezimmer. Danach ist es dieselbe Person bis zu den Trägern des Tops, dieselbe Ablage, dieselbe Armatur, dasselbe Fenster. Die Identitätsdrift zwischen Modell und fertiger Szene ist damit weitgehend erledigt.
|
||||
|
||||
### Verbessern-Strecke ✅ **erledigt (15.08.2026)**
|
||||
|
||||
Im Ergebnis-Screen gibt es „Nachschärfen": ein Feld für die Korrektur, dann vier weitere Varianten. Die freigegebene Version bleibt gültig, bis bewusst eine neue gewählt wird.
|
||||
|
||||
Zwei Dinge, die dabei anders sind als in der ersten Runde:
|
||||
|
||||
- **Die Korrektur geht in P7s `ANWEISUNGEN`-Slot**, ausdrücklich mit Vorrang vor den Standardvorgaben. Ohne das gewinnt P7s eigener Satz „Neutral relaxed expression, no smile" gegen den Nutzerwunsch – genau das ist im Test passiert.
|
||||
- **Die Runde ankert an der freigegebenen Version**, nicht am ursprünglichen Upload. Sonst driftet das Aussehen mit jeder Runde weiter weg.
|
||||
|
||||
Durchgespielt an „Lena" mit der Korrektur „weicheres Licht, leichtes Lächeln": Licht und Mimik geändert, Gesicht erhalten.
|
||||
|
||||
> **Drei Fehler, die dieser eine Test aufgedeckt hat:** `ANWEISUNGEN` war leer, die Korrektur erreichte P7 also nie. Der Blickwinkel-Text schrieb „neutral relaxed expression" fest, was jede Mimik-Änderung unmöglich machte. Und beim Freigeben wurde nur `entwurf` archiviert – die abgelöste Version blieb auf `freigegeben` stehen und erschien in der Liste als „Entwurf".
|
||||
|
||||
**Offen:** Einwilligungs-Upload für Personen.
|
||||
|
||||
### Enum-Erweiterung: Risiko geprüft, nicht mehr theoretisch
|
||||
|
||||
§2.6 warnte, Enum-Änderungen könnten die Spalte neu anlegen und Daten vernichten – mit dem Zusatz „je nach Version". **Für Appwrite 1.8.1 am 15.08.2026 gegen eine Wegwerf-Tabelle geprüft:** additiver `PATCH` liefert 200, alle Bestandswerte überleben, der neue Wert ist sofort nutzbar. `setup-appwrite.mjs` zieht Enums seither automatisch nach – **rein additiv**, live vorhandene Zusatzwerte werden gemeldet, nie entfernt.
|
||||
|
||||
**Zwei Auflagen:** Nach jedem Appwrite-Upgrade den Test wiederholen, bevor das Skript gegen Produktion läuft. Und `prompt_templates.key` steht auf einer Tabu-Liste – die Tabelle ist mit 22 Zeilen gefüllt und trägt die Identität jedes Prompts; dort ist jede Enum-Berührung ein bewusstes Migrationsprojekt, kein Skriptlauf.
|
||||
|
||||
### E5 · Ordner ✅ **erledigt (14.08.2026)**
|
||||
**Inhalt:** Ordner-Liste, Anlegen mit den zwei Schaltern, Ordner-Detail, aktiver Ordner als App-Zustand. Function `ordner-initialisieren`.
|
||||
|
||||
@@ -272,7 +272,11 @@ Es gibt jetzt **zwei Stränge**, die parallel laufen können – der Bild-Strang
|
||||
4. **Appwrite aufsetzen** und das Schema aus `datenbank-aufbau.md` anlegen – **inklusive `attribute_scores`-Auftrennung von Anfang an** (siehe Abhängigkeit in §12).
|
||||
5. **Elo-Function implementieren** (deterministisch, gut testbar – guter erster Code), scope-bewusst.
|
||||
6. **Nischen- und Typ-Tag-Enums festlegen** – blockiert P19, P22 und die Kopier-Kompatibilität.
|
||||
7. **Bildmodell auswählen** – Kriterium ist Multi-Referenz-Komposition (Person + Produkt + Kulisse konsistent), nicht reine Bildqualität. Vier Kandidaten stehen bereit: `google/gemini-3-pro-image`, `google/gemini-3.1-flash-image`, `openai/gpt-5-image` (OpenRouter) und `seedream-5-0-260128` (Ark eu-west). **Seedream hat den Standortvorteil** – bei gleichwertigem Ergebnis bliebe der gesamte Bild-Strang in der EU und §10 wäre nur für Video zu klären. Der Test entscheidet, nicht die Herkunft.
|
||||
7. ~~**Bildmodell auswählen**~~ – ✅ **entschieden am 15.08.2026: `google/gemini-3-pro-image`** (über OpenRouter). Der Multi-Referenz-Test ist bestanden: Person, Produkt und Kulisse als getrennte Modelle angelegt, freigegeben und in **einer** Szene komponiert – alle drei im Ergebnis erkennbar. Rund 0,14 $ je Bild, dazu ~0,01 $ für den P7-Prompt.
|
||||
|
||||
**Zwei bekannte Schwächen:** Das Modell ignoriert das angeforderte Seitenverhältnis und liefert 1408×768 – die Formatwahl (1:1 / 4:5 / 9:16) in der App hat damit noch keine Wirkung. Und die Identität driftet zwischen Modell-Referenz und fertiger Szene sichtbar, weil Referenzbilder bisher **nicht** als Bild-Eingabe mitgehen, sondern nur als Merkmalstext. Beides ist nachrüstbar, keins blockiert.
|
||||
|
||||
**Seedream bleibt die DSGVO-nähere Option** – sobald der Model Service im Ark-Konto freigeschaltet ist, lohnt der Gegentest: bei gleichwertigem Ergebnis bliebe der gesamte Bild-Strang in der EU.
|
||||
8. **Prototyp erweitern:** Feed, Post-Detail, Kopier-Screen mit Slot-Chips, Ordner-Ansicht, Ordner anlegen (zwei Schalter).
|
||||
9. Entscheidungen nachziehen: Name, Preisstufen **für beide Zielgruppen**, Ads- **und Social-**API-Anträge starten.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user