Rezepte
Ein Rezept ist ein veröffentlichter Launch-Film, der studiert und niedergeschrieben wurde, damit ein Agent seine Handwerkskunst für ein anderes Produkt neu aufbauen kann.
Es liegt in <studio>/src/recipes/<id>/:
| Datei | Immer | Was sie dir gibt |
|---|---|---|
recipe.md | ja | Wann verwenden, das Beat-Sheet (Zeiten, Frames, Bild, Kamera, Bewegung, Übergang, Sound), Techniken verlinkt auf Handwerk (craft), was anzupassen, Fallstricke, fehlende Komponenten |
recipe.json | ja | Die gleichen Daten als strukturierte Daten (Schema schemas/recipe.schema.json): structure[], techniques, audio, inputs, components, source |
Recipe.tsx + index.tsx | nur wenn status: "built" | Fertiger Code: eine Komponente parametrisiert durch brand + content, registriert mit einer Demo-Marke |
Die meisten Rezepte sind reiner Text (status: "studied"), und das reicht aus, um daraus zu bauen: Du schreibst die Szenen aus dem Beat-Sheet mit den Studio-Presets und -Komponenten. Ein Rezept enthält niemals den Quellfilm, seine Frames oder seinen Text; der Quelllink ist die Art und Weise, wie der Nutzer die Referenz sehen kann.
Führe Befehle von launch-video/ (Nutzer) oder studio/ (launchfilm-Repo) aus. recipes/ und schemas/ liegen im Stammverzeichnis der Umgebung (launch-video/ in einem Nutzerprojekt, der Repo-Stamm in launchfilm).
1. Wissen, was du brauchst (aus BRIEF.md / STORYBOARD.md)
Schreibe vor der Suche auf: Preset(s) (Seitenverhältnis), Zieldauer, Modus (Produktfilm / Launch-Film / Hybrid), Theme (dunkel/hell aus brand.json), VO ja/nein, die benötigten Beats (hook, feature, logo…), die tatsächlich vorhandenen Eingaben des Nutzers (Logo, Screenshots, eine Bildschirmaufnahme, eine wiederaufbaubare UI, Statistiken, eine URL).
2. Suche
Überfliege recipes/CATALOG.md (eine Zeile pro Rezept, gruppiert nach Familie: Format, Top-Techniken, Eingaben, Quelle, Text/Code), oder suche:
npx launchfilm ref search "statement vertical dark" # Freitext über Titel, Zusammenfassung, Tags, Techniken
npx launchfilm ref search "launch aspect:9:16 max:30 theme:dark" # Filter: family: aspect: tech: theme: max: min: status:
Oder filtere recipes/index.json direkt (Felder: references/index-format.md):
node -e '
const idx=JSON.parse(require("fs").readFileSync("recipes/index.json","utf8")).recipes;
const want={aspect:"9:16",dur:30,techniques:["statement-sequence","end-card"],theme:"dark"};
for(const r of idx){const t=r.techniques.filter(x=>want.techniques.includes(x)).length;
if(r.format.aspect===want.aspect||t>0) console.log(r.id,r.format.aspect,r.format.duration_s+"s",r.theme,r.vo?"vo":"-",t,r.code?"code":"text");}'
Kein Index? Durchsuche src/recipes/*/recipe.json und lese sie.
3. Bewerten und 1–3 auswählen
| Kriterium | Punkte |
|---|---|
format.aspect entspricht dem Seitenverhältnis des Haupt-Presets | +3 (Neuformatierung ist möglich, aber aufwändig) |
format.duration_s innerhalb von ±30 % der Zieldauer (oder das Rezept deckt den benötigten Beat ab) | +2 |
| Jede Technik, die die Anforderungen des Storyboards überlappt | +1 (max +4) |
Jedes benötigte inputs-Feld besitzt der Nutzer | +2; jedes fehlende Input, das nicht erstellt werden kann |
theme stimmt mit brand.json-theme überein | +1 |
vo stimmt mit dem Plan überein | +1 |
code: true (fertiger Recipe.tsx) wenn der Nutzer es eilig hat | +1; status: "reviewed" |
render_cost schwer, während der Nutzer auf einem Laptop arbeitet oder es eilig hat | −1 |
Text vs. Code ist ein Geschwindigkeitsbonus, kein Qualitätsfilter: Ein Text-Rezept, das zur Aufgabenbeschreibung passt, ist besser als ein codiertes, das nicht passt. Nimm das beste für einen ganzen Film, oder bis zu 3 für verschiedene Beats (Hook von A, Features von B, End Card von C).
4. Die Auswahl anzeigen
Zeige dem Nutzer für jede Auswahl:
- Titel (
id) undtextodercode; - eine Zeile, warum es zur Aufgabenbeschreibung passt (Seitenverhältnis, Länge, abgedeckter Beat, vorhandene Eingaben);
- das Beat-Sheet in 3–6 kurzen Zeilen (
0–3.1 s hook: name blurs in word by word…), zusammengefasst aus recipe.md; - den Quelllink (
source.url), damit der Nutzer das Original selbst ansehen kann. Es gibt keine gehosteten Vorschauen.
In einer betreuten Sitzung lass sie wählen. Wenn der Nutzer „entscheide selbst“ gesagt hat, nimm die höchste Punktzahl und sage das in einer Zeile.
5. Das Rezept lesen
Lese das gewählte recipe.md vollständig: das Beat-Sheet, Bewegung in Frames und benannten Federn, Übergänge, den Sound bei jedem Ereignis, „Was anzupassen“, „Fallstricke“, „Fehlende Komponenten“. Lese recipe.json structure[], audio, inputs, components. Diese Zahlen sind das Handwerk, das du wiederverwendest; Bild und Text stammen vom Nutzer.
6. Grundgerüst erstellen
npx launchfilm new <slug> --recipe <id> --preset x-16x9 [--title "Produkt"] [--dry-run]
- Rezept mit Code:
films/<slug>/Film.tsxerhält einerecipe-Szene, die die Komponente des Rezepts mit ihren Standardwerten rendert; du änderst ihrecontent-Props (recipe.jsonparams) und übergibst die Marke. - Text-Rezept:
film.jsonerhält einen Shot pro Beat-Sheet-Zeile (die Zeiten des Rezepts, seine Übergänge und SFX), undFilm.tsxerhält einenTodoScenepro Shot mit dem Bild, der Kamera, der Bewegung und dem Sound der Zeile als Kommentare. Die CLI gibt die Liste der TODOs aus. Ein TodoScene rendert einen beschrifteten Platzhalter, undnpx launchfilm qaschlägt fehl (B1), solange einer übrig ist. - Beide kopieren
recipe.mdnachfilms/<slug>/RECIPE.mdund füllenSTORYBOARD.mdmit den Zeilen des Rezepts vor. - Rezepte kombinieren: Grundgerüst aus dem Rezept, das die meiste Laufzeit dominiert, dann die Zeilen der anderen Rezepte als Shots hinzufügen (ihre
Recipe-Komponente als Szene, wenn sie Code haben, sonst TODO-Szenen).
7. Bauen (Details: references/remix.md)
- Takte zuerst das Grundgerüst auf die Länge und das Beat-Raster des Nutzers um (remix.md §3): Behalte die Beat-Reihenfolge und Proportionen bei, raste jede Grenze auf einen Downbeat oder eine VO-Phrase ein. Aktualisiere die Shots in
film.jsonund die STORYBOARD-Zeilen; der Nutzer genehmigt das Storyboard (Gate 3), bevor Szenen gebaut werden. - Marke: brand.json in jede Szene durch
useBrand()(Code-Rezepte: diebrand-Prop). Bearbeite niemals den Rezept-Ordner. - Inhalt: Produktname des Nutzers, Zeilen, Statistiken und UI. Niemals den Text des Quellfilms oder den Text der Demo-Marke.
- Text-Rezept-Szenen: Ersetze jeden
TodoScenedurch eine Szene, die aussrc/presetsundsrc/componentserstellt wird (lies zuerstAPI.md; die Fertigkeitscene-buildbesitzt die Regeln). Verwende die Komponenten, die recipe.json auflistet; behalte die benannten Federn, Frame-Anzahlen, Staffelungen und Übergangs-IDs der Zeile exakt bei; Bewegungsdauern skalieren nicht mit der Filmlänge. Eine Komponente, die das Rezept unter „Fehlende Komponenten“ auflistet, wird infilms/<slug>/scenes/nach ihrer Spezifikation gebaut. - Sound: Jedes Ereignis in
audio.sfxund dassfxjeder Zeile behält seinen Sound am neuen Frame (Kleberegel, craft/02). - Standbilder bei jedem Shot vor jedem Rendern (scene-build Schritt 4), dann
film-qa.
Regeln
- Rezepte sind Ausgangspunkte, keine Ergebnisse: Der Film trägt die Geschichte des Nutzers (STORYBOARD zuerst genehmigt).
- Nichts aus der Quelle fließt in den Film: kein Quelltext, keine Quellmarke, kein Quellmaterial. Der Quelllink dient dem Nutzer zum Ansehen und bleibt in
recipe.jsonund deiner Nachricht, niemals im Film. - Fehlende Komponente → baue sie innerhalb von
films/<slug>/scenes/, nicht im Rezept-Ordner oder in gemeinsamen Presets. - Halte in STORYBOARD.md fest, welche(s) Rezept(e), welche Zeilen, den Skalierungsfaktor und die Parameter, damit eine Wiederholung reproduzierbar ist.