Was macht Produktwerbevideo (promo-video)?
Sie tun nur zwei Dinge: Kameraeinstellungen auswählen und Text ausfüllen. Kein Code schreiben, keine Dateien in template/, scripts/, industries/ ändern, keine Koordinaten, Bildnummern oder Farbwerte notieren.
Im Folgenden ist <SKILL> das Verzeichnis, in dem sich diese Datei befindet. Alle Befehle werden mit Node 22 / Python 3.10 ausgeführt. Für englische Videos (Englischsprachige Nutzer) → stattdessen <SKILL>/SKILL.en.md lesen.
Ablauf
- Branche und Sprache festlegen.
meta.industry:software(Standard) /food(Gastronomie) /ecommerce(E-Commerce, physische Waren) /education(Bildung) /beauty(Schönheitspflege) /travel(Tourismus & Unterkunft). Bei falscher Branche sind die verfügbaren Aufnahmen und Compliance-Regeln falsch.meta.lang:zh(Standard) /en. Wenn das Video englische Untertitel haben soll und die Nutzer Englisch sprechen, dann aufensetzen (siehe Schritt 5 für die Verwendung).- Für Branchen, die NICHT
softwaresind → zuerst<SKILL>/industries/<industry>/recipe.mdlesen (für englische Projekterecipe.en.md): Dort stehen die empfohlenen Shot-Kombinationen für diese Branche, einebrief-template.md(welche Fragen dieser Branchen-Briefing-Bogen enthalten soll), undtest-brief.md/expected.md(Beispiele für Compliance-Rotlinien). Wer diesen Schritt überspringt, riskiert Inhalte, die abgewiesen werden.
- Briefing erfassen. Die Kategorien des entsprechenden
brief-template.mdverstehen; wenn Angaben wie „Produktname / Ein-Satz-Value-Proposition / Schmerzpunktszenario / Kernaktion / 2–4 Verkaufsargumente“ fehlen, zuerst nachfragen, keine Daten oder Funktionen erfinden.meta.productwird eins zu eins aus dem Briefing übernommen; im gesamten Video (Hook-Kapsel, End-Card Brand) wird nur dieser eine Name verwendet. Derbrandauf der End-Card muss buchstabengetreu mit ihm übereinstimmen.meta.action: Pflichtfeld, ein Satz, der beschreibt: „Was der Nutzer tut → was das Produkt liefert“ (z. B. „Kassenbon fotografieren → Betrag und Kategorie werden automatisch eingetragen“), ohne Bildschirm. Der Text in Demonstrations-Shots (chat/phone/mockApp/photoShot) muss diese Aktion widerspiegeln; die Validierung prüft dies.- Wenn das Briefing eine „Bezugsquelle“ enthält → diesen Wortlaut in
meta.ctaübernehmen; diectaauf der End-Card muss ihn identisch übernehmen. Wenn das Briefing „keine“ angibt → an beiden Stellen weglassen. Nicht selbst erfinden („XX im App Store suchen“). - Keine Funktionen in die Verkaufsargumente oder die End-Card schreiben, die nicht im Briefing stehen.
- Wenn das Briefing „Zahlen und Quellen“ enthält → jede einzelne in
meta.factsübernehmen, Format:[{"id":"f1","text":"Originaltext..."}](kein reines String-Array). Jede Zahl mit Einheit (Zeit, Prozent, Multiplikator, Personenanzahl, Geldbetrag) auf dem Bildschirm muss hier mit derselben Zahl auffindbar sein. Fehlt eine Quelle → Fehlermeldung (keine Warnung). Wenn tatsächlich keine Daten gegeben wurden → qualitative Formulierung verwenden, keine Zahlen erfinden. Mitparams.refs: ["f1"]in einem Shot kann eine bestimmte Aussage (z. B. „frisch zubereitet“) mit einem bestimmten Fact verknüpft werden, zur Überprüfung durch die Branchenregeln. - Für denselben Vorgang im gesamten Video nur eine einzige Zeitangabe verwenden: Wenn der Counter „3 Minuten“ schreibt, darf an anderer Stelle nicht „in Sekunden“ oder „3 Sekunden“ stehen; wenn der Hook „einen halben Tag“ sagt, muss auch der alte Wert im Counter „einen halben Tag“ lauten. Die Validierung wird dies abweisen. Bei
comparedürfenstatunditemsderselben Spalte nicht widersprüchlich sein (z. B. linke Spalte schreibt „5 Minuten“ und „drei Tage“). - Um den Standard-Zeitrahmen von 15–45 Sekunden zu überschreiben (z. B. wenn die Branchenempfehlung länger als 27 Sekunden ist),
meta.durationRange: [15, 60]als Zweier-Array angeben. - Für dauerhafte kleingedruckte Hinweise am unteren Bildschirmrand (z. B. „Aktion befristet, es gilt die Detailseite des Gruppenangebots“)
meta.noticesals String-Array (max. 3 Einträge) angeben; sie werden in einer Zeile am unteren Rand angezeigt.
- Verzeichnis anlegen:
promo/<Produktname_englisch>/; das Storyboard (storyboard.json) inpromo/<Produktname_englisch>/. Screenshots/Aufzeichnungen/Logos des Nutzers werden in dasselbe Verzeichnis kopiert. - Thema auswählen (
meta.theme):- Emotional, sozial, Lifestyle →
warm-emotion - Entwickler, KI, anspruchsvolle Tools →
tech-dark - Gesundheit, Lernen, Ausgaben-Tracker, leichte Tools →
fresh-light - Büro, B2B, Effizienz →
business-blue - Feiertage, Aktionen, Neuheiten →
festival-red - Premium, minimalistisch, Design →
mono-premiumWenn eine Markenfarbe vorhanden ist,meta.brandColor(#RRGGBB) eintragen; sie ändert nur die Akzentfarbe.
- Emotional, sozial, Lifestyle →
- 5–9 Shots auswählen (Shot-Beschreibungen siehe
<SKILL>/shots.md, eine Übersicht der 18 Shots oben).hookMUSS der erste Shot sein (2–3 Sekunden),endCardMUSS der letzte Shot sein (4 Sekunden). Ein Shot muss die Kernaktion demonstrieren (das in Schritt 2 festgelegtemeta.action); die Validierung wird dies prüfen:chat→ Nachrichten + Panel (Frage → Antwort); odermockApp→ Eingabe (Nutzer gibt etwas ein / stellt eine Frage) + Ergebnis (Dashboard-Stat, Editor-Items, Done); wenn ein Screenshot vorhanden ist,phoneverwenden.meta.industrybestimmt, welche Shots verwendet werden können (sieheindustries/<industry>/rules.jsonunterenabledShots, oder direkt das recipe.md). Die Validierung meldet einen Fehler, wenn ein nicht freigegebener Shot verwendet wird. Branchenspezifische Shots (für software standardmäßig deaktiviert):photoShot: Echte Fotos/Kurzvideos (Gerichte, Waren, Werke, Räume, öffentliche Bereiche, Küche)priceCard: Preisliste;storeCard: Filialkarte/Karte/Buchung;reviewCard: Echte Kundenbewertung (Originaltext, nicht übertrieben umformulieren)factSheet: Spezifikationstabelle / Packliste / Kursübersicht / Prüfungsinformationen / Farbkarte;credCard: Qualifikations-/AnerkennungskartebeforeAfter: Vorher-Nachher-Schieberegler (nur für Beauty freigegeben, erfordertconsent: true+retouched: false) Shots entsprechend des Produkttyps auswählen, keine feste Vorlage verwenden,featuresist nicht obligatorisch. Zwei harte Anforderungen (die Validierung erinnert daran):- Mindestens ein Shot in der Mitte muss aus {compare, steps, phone, meter} stammen;
quickListundcounternicht gleichzeitig verwenden (wenn beide verwendet werden, wird das Video zum Schablonen-Stil: Hook → quickList → mockApp → counter → endCard). Für die Branchesoftwaremögliche Kombinationen (eine auswählen, dann an das Produkt anpassen; für andere Branchen direkt die empfohlenen Strukturen inindustries/<industry>/recipe.mdverwenden):- B2C Emotional/Sozial (Chat, Emotionen, Begleitung): hook(bubble) → chat Demo (2–3 Sätze Untertitel) → meter oder compare über „die Bedeutung dieser Worte“ → quickList → endCard
- Tool-Effizienzsteigerung (Schreiben, Finanzen, Veröffentlichung, Schnitt): hook(stat) → compare über „früher vs. jetzt“ → mockApp editor/form Demo „Eingabe → Ergebnis“ → steps zur Nutzung → endCard; oder hook → quickList über Nachteile → mockApp → steps → endCard
- B2B Daten/Büro (Berichte, Meetings, CRM): hook(icon) → phone Screenshot mit Markierung oder mockApp dashboard mit input „Frage stellen → Daten erhalten“ → compare oder meter über Ergebnisse → steps → endCard; einen counter (dann KEIN quickList) nur verwenden, wenn das Briefing eine konkrete Zeitangabe enthält.
Gesamtlänge idealerweise 20–30 Sekunden (erlaubt 15–45 oder der selbstdefinierte Bereich aus
meta.durationRange). Nicht denselben Shot-Typ hintereinander verwenden. Der Unterschied immoodzwischen benachbarten Shots sollte nicht mehr als 0,5 betragen (dazwischen einen Übergangsshot einfügen), sonst wirkt der Hintergrundwechsel zu abrupt.
- Untertitel schreiben (
captionpro Shot): Ein Satz pro Shot, große Schrift (Douyin-Stil), zum Publikum sprechen, nicht die Bewegung des Bildschirms beschreiben (❌ „Die Karten kommen eine nach der anderen, zeigt, was es kann“ ist eine Shot-Beschreibung, kein Untertitel).- Chinesisch: Maximal 2 Zeilen, mit
\numbrechen; jede Zeile ≤12 chinesische Schriftzeichen (Buchstaben/Ziffern zählen als halbe). Beimeta.lang: "en"werden englische Untertitel umgerechnet (ca. 1,8× der chinesischen Begrenzung); die genauen Zahlen stehen indocs/shots/<type>.en.md. {}um die 2–5 wichtigsten Schriftzeichen setzen, sie werden in der Akzentfarbe angezeigt; maximal eine Stelle pro Untertitel.- Der
captiondes Hooks = Titel des Covers; die Schmerzpunkte oder eine kontraintuitive Frage des Nutzers formulieren. - Die
endCardhat keinencaption; der Slogan wird inparams.slogangeschrieben. - Derselbe Untertitel darf maximal 5 Sekunden stehen bleiben. Bei Shots, die länger als 5 Sekunden sind (z. B. 8–10 Sekunden bei
chat), dencaptionals Array mit 2–3 Sätzen schreiben, die Untertitel gleichmäßig über die Shot-Dauer verteilen:"caption": ["先别急着发,\n对方要的是{你的在乎}", "挑一条填进输入框,\n发不发{你决定}"] - Untertitel sollten die Situation des Nutzers oder die durch das Produkt bewirkte Veränderung beschreiben und an die vorherigen/nächsten Shots anknüpfen; was auf dem Bildschirm passiert, ist Sache der Komponenten und muss nicht beschrieben werden. Wörter, die in den Untertiteln mit « » in Anführungszeichen gesetzt sind, müssen in diesem oder einem früheren Shot auf dem Bildschirm erschienen sein (die Validierung prüft dies).
- Wenn der Untertitel eine Menge enthält („diese 4 Sätze“, „drei Antworten“), muss diese mit der Anzahl der Einträge in diesem Shot übereinstimmen (die Validierung prüft dies).
- Keine Allzweck-Sätze verwenden („Drei Dinge, {es...}“, „Diese drei Schritte“, „Diese Momente, kennst du das auch...“), keine Untertitel oder Parameter aus examples, shots.md oder der Spezifikation kopieren (die Validierung erinnert daran und gibt eine einsatzbereite Vorlage); Beispiele dienen nur dem Formatverständnis.
- Keine Verdoppelungen („Termin Termin“), keine Zeichen löschen, um die Längenbegrenzung zu erreichen („Kneifzange“ nicht zu „Kneifza“), keine Tippfehler („einloggen“ nicht „einlogen“); bei Überschreitung der Zeichenzahl den gesamten Satz umformulieren.
- Keine übertriebenen Formulierungen („Erledigt alles“, „Klar wie Kloßbrühe“, „Sorglos“, „100%“): Diese sind für das Produkt schwer zu belegen; die Validierung erinnert daran. Stattdessen maßvolle Formulierungen wählen.
- Zeilenumbruch nur mit einem Backslash
\n; in den Untertiteln für Zitate…verwenden, keine doppelten Anführungszeichen".
- Chinesisch: Maximal 2 Zeilen, mit
moodfestlegen (0–1): Schmerzpunkt/Spannung 0.8–1, Wendepunkt 0.5, Produkt und Verkaufsargumente 0–0.3, End-Card 0. Hintergrundfarbe und Musik folgen diesem Wert.- storyboard.json schreiben, Format siehe vollständiges Beispiel am Ende. Dauer mit
dur(Sekunden), als Vielfaches von 0,5 angeben. Die Datei muss UTF-8-codiert sein. Unter Windows (chinesisch, Standard GBK): Mit einem Editor/Tool direkt UTF-8 schreiben; in PowerShell[IO.File]::WriteAllText($p, $json, [Text.UTF8Encoding]::new($false)); in Pythonopen(p, "w", encoding="utf-8"). Nichtecho >,Out-File(5.1) für chinesische Zeichen verwenden. Daspanel.repliesbeichatenthält die Vorschläge des Produkts als „Ich“ an die andere Person, aus der Perspektive von „mir“ geschrieben (Ich sage, ich muss Überstunden machen; die Antwort sollte nicht lauten: „Hör auf mit Überstunden, komm mit mir“ – das wäre die Perspektive der anderen Person); mit Panel keintypingverwenden. - Validieren, die Fehler einzeln beheben, bis der Durchlauf fehlerfrei ist:
Das Fehlerformat ist „Shot N (Typ) Feld: Problem → wie beheben“. Nach der „wie beheben“-Anleitung handeln. Die Ergebnisse sind in drei Kategorien unterteilt:node <SKILL>/scripts/validate.mjs promo/<Produktname>/storyboard.json- Fehler (errors): Müssen behoben werden; sonst wird kein Video erstellt.
- Warnungen (warnings): Sollte nach Möglichkeit behoben werden (Textqualität, Struktur nicht zu schablonenhaft). Wenn nicht möglich, kann dennoch ein Video erstellt werden. Bei der Auslieferung muss dem Nutzer begründet werden, warum nicht behoben.
- Menschliche Überprüfung (human): Dinge, die die Validierung nicht beurteilen kann (z. B. „Ist diese Bewertung wirklich wortwörtlich übernommen?“, „Stammt diese Qualifikation tatsächlich aus dem Briefing?“). Das Storyboard nicht ändern, sondern dem Nutzer in der Liste vorlegen und ihn selbst entscheiden lassen.
- Video rendern (dauert ca. 2 Minuten, Musik wird automatisch generiert):
node <SKILL>/scripts/make.mjs promo/<Produktname>/storyboard.json --out promo/<Produktname>--outist Pflicht (für Tests stattdessen--round <Rundennummer>verwenden; die Ausgaben landen einheitlich intests/<Rundennummer>/<Produktname>/. Mehrere Videos derselben Testrunde erhalten denselben Rundennamen. Keine eigenen, sekundengenauen Zeitstempelverzeichnisse erstellen). Ausgaben:video.mp4,sheet.png(ein Frame pro Sekunde als Collage),check/(Frame 0 + Frames am Ende jedes Shots in voller Größe),report.txt(enthält Textlayout-Bericht: Worttrennung, Überbreite),layout.json. Für eine schnelle Ansicht:--stills 0,3.5,8(Sekunden) → nur Einzelframes rendern, kein vollständiges Video. - Zuerst das Ende von
report.txtlesen („Maschinelle Selbstprüfung“, „Textlayout-Bericht“, „Layout-Selbstprüfung“ – make.mjs macht dies automatisch: Prüfung auf Backslashes, Produktnamen, Bezugsquellen, Untertitel-Anzeigedauer, Überlappung von End-Card-Symbol und Haftungsausschluss, Worttrennungen/Überbreiten; Rendering misst die Position jedes Textblocks und prüft auf Beschneidung durch Karten, Überlappungen von Textblöcken oder Text außerhalb von x150–930). Bei ✗: zuerst beheben (Layout-✗ bedeuten meist zu viele Einträge in einem Feld: Einträge löschen oder Text kürzen). Danachsheet.pngundcheck/anhand der folgenden Liste selbst prüfen. Bei Problemen dasstoryboard.jsonkorrigieren und zu Schritt 9 zurückkehren. - Auslieferung: Pfade zu
video.mp4undsheet.pngan den Nutzer übergeben, zusammen mit der „Checkliste vor Veröffentlichung“ (siehe unten) – die Einträge aus Schritt 9 unter „Menschliche Überprüfung“ werden unverändert aufgelistet und der Nutzer muss jeden Punkt bestätigen. Der Entwickler trifft keine eigene Entscheidung.
Selbstprüfungsliste (anhand der Collage, für jedes Bild einzeln das Ergebnis notieren, nicht einfach abhaken)
- Frame 0 zeigt bereits eine große Überschrift + Hauptvisual, kein leerer oder halber Bildschirm; auf dem Cover gibt es keine
\n, Backslashes oder andere komische Zeichen. - Jeder Shot hat einen sich bewegenden Protagonisten (Zeiger, Zahlen, Karten, Chat-Blase), kein statisches Bild; kein „Bild hin- und herzoomen“ als Lückenfüller.
- Untertitel überdecken keine Hauptelemente, werden nicht abgeschnitten, keine Worttrennungen (ein Wort auf zwei Zeilen); Untertitel und Bild erzählen dieselbe Geschichte, die Story benachbarter Shots passt zusammen.
- Untertitel sprechen zum Publikum, keine Shot-Beschreibungen (keine Sätze wie „Die Karten erscheinen nacheinander“).
- Die Kernaktion wurde wirklich demonstriert („Eingabe/Frage → Ergebnis“ ist sichtbar), nicht nur eine vorgefertigte Tafel.
- Hintergrundfarbe folgt der Stimmung: Schmerzpunkte eher rötlich, Verkaufsargumente und End-Card eher kühl.
- Produktname auf der End-Card stimmt mit
meta.productüberein; Bezugsquelle ist der Originaltext aus dem Briefing oder wird weggelassen; keine URLs, QR-Codes. - Zahlen sind konsistent: Die Zahlenwerte in Vergleichen selbst nachrechnen („30 Minuten vs. 5 Sekunden“ → Fazit nicht „25 Minuten gespart“ schreiben). Die Zahlen auf dem Bildschirm haben eine Quelle in
meta.facts. - Keine Tippfehler, keine Wortneuschöpfungen, die durch Löschen von Zeichen entstanden sind („automatisch hochladen“ nicht zu „autoladen“), keine übertriebenen Formulierungen.
- Branchenspezifische Shots korrekt verwendet:
beforeAfternur in Beauty; Zitate inreviewCardsind Originaltext, nicht übertrieben umformuliert.
Checkliste vor Veröffentlichung (dem Nutzer bei Auslieferung mitgeben, nicht nur selbst durchgehen)
- Alle Einträge aus „Menschliche Überprüfung“ auflisten: Die
human-Liste aus der Validierung in Schritt 9 unverändert an den Nutzer weitergeben. Nicht selbst entscheiden, ob „es wohl okay ist“. Häufige Beispiele: Zitate inreviewCard/credCardsind buchstabengetreu aus dem Briefing? Plattformrichtlinien auf dem neuesten Stand? Gewerbeberechtigungen vollständig? - Ist
meta.industryrichtig gewählt (sonst sind die verfügbaren Shots und Compliance-Regeln falsch)? - Betrifft das Video echte Personen, Kundenbewertungen, Vorher-Nachher-Fotos: Liegt eine schriftliche Einwilligung der Betroffenen vor (
consent/retouchedsind nur Validierungsfelder; die tatsächliche Einholung der Zustimmung ist Aufgabe des Nutzers, nicht der Validierung). - Stimmt die für die Veröffentlichung vorgesehene Plattform (Douyin/WeChat Video Channel/Xiaohongshu/International) mit
meta.platformüberein? Wurden die plattformspezifischen Regeln (z. B. Verbot von Preisunterschriften in Shopping-Cart-Videos) bestätigt? - Bei zweisprachigen Projekten (Chinesisch/Englisch): Hat ein Muttersprachler die englischen Untertitel Korrektur gelesen? Die Maschine prüft nur Zeichenzahl und sensible Begriffe, nicht auf stilistische Holprigkeiten.
Harte Regeln (die Validierung blockiert)
- Erster Shot MUSS
hooksein;endCardMUSS am Ende stehen. - Gesamtlänge 15–45 Sekunden (oder der selbstdefinierte Bereich aus
meta.durationRange); jeder Shot-Typ hat einen eigenen Zeitrahmen (siehe shots.md). - Jedes Feld hat eine Zeichenobergrenze. Bei Überschreitung den gesamten Satz durch eine kürzere Version ersetzen; keine Zeichen innerhalb von Wörtern löschen, um zu sparen, und nicht auf Englisch ausweichen (bei
meta.lang: "en"haben englische Texte eigene Zeichengrenzen, siehe Feldbeschreibung). - Nur die in shots.md aufgeführten Felder, Werte und Symbolnamen verwenden; falsch geschriebene oder zusätzliche Felder führen zu Fehlern.
- Mindestens ein Shot demonstriert
meta.action(siehe Schritt 5); derselbe Untertitel darf maximal 5 Sekunden stehen bleiben. endCardbrand=meta.product;endCardcta=meta.cta(wenn das Briefing keine Angabe enthält, beide weglassen).- Im Bildschirmtext darf kein Backslash vorkommen (ein
\\nin JSON wird wörtlich als\nauf dem Bildschirm angezeigt). - Auf dem Bildschirm sind verboten: URLs, QR-Codes, „Scan-Code“, @Kontoname, „XX-Nummer: Name“, „Folgen/Suchen Sie XX-Nummer“. Produktkategorienamen selbst (z. B. ein Tool, das Layouts für „Gongzhonghao“ (WeChat-Kanal) erstellt) gelten nicht als Traffic-Leitung: Das Wort in
meta.allowWordsaufnehmen. Nicht den Produktnamen ändern, um die Validierung zu bestehen. - Keine Extremwörter aus dem Werbegesetz verwenden: „am besten/ersten/größten“, „einzigartig“, „exklusiv“, „top“, „absolut“, „100%“, „im ganzen Netz“, „weltweit führend“… („zuletzt“, „der erste Schritt“ sind okay). Wenn es eine tatsächliche Grundlage gibt, in
meta.allowWordseintragen. - Zahlen mit Einheit (Zeit/Prozentsatz/Multiplikator/Personenzahl/Geldbetrag) müssen identisch in
meta.factsauffindbar sein. Fehlt die Quelle → Fehlermeldung, da erfunden. - Branchenregeln: block = immer blockieren (z. B. Wirksamkeitsbehauptungen für Medizinprodukte, Preis ohne Begründung, echte Bewertung ohne Monatsangabe); warn = Warnung, blockiert aber nicht; human = kann die Validierung nicht beurteilen, bei Auslieferung dem Nutzer vorlegen (siehe Punkt 1 der „Checkliste vor Veröffentlichung“).
- Medien-Pfade sind relativ zum Verzeichnis des
storyboard.json; die Dateien müssen existieren. Screenshots: png/jpg/webp; Bildschirmaufzeichnungen: mp4.
Verbotene Handlungen
- Keine Änderungen an Dateien in
template/,scripts/,industries/. Keine Koordinaten, Pixel, Bildnummern, Farbwerte, CSS notieren. - Keine Daten oder Quellen erfinden, die der Nutzer nicht geliefert hat. Zahlen auf dem Bildschirm müssen in
meta.factsauffindbar sein. Fehlt die Quelle, dann „Beispieldaten, nur zur Veranschaulichung“ schreiben. - Keine Namen, Logos oder Markenfarben von Drittanbieter-Apps (z. B. die grüne Blase einer Chat-App) verwenden. Stattdessen „die andere Person“, „Kollege“, „Kunde“.
- Keine echten Personennamen, Telefonnummern, Kontonummern verwenden.
- Das
bgm-Feld nicht verwenden (make.mjs füllt es automatisch). - Nicht selbst über Grauzonen der Branchen-Compliance entscheiden (z. B. „Ist dieser Ausdruck ein medizinischer Begriff?“). Wenn die Validierung blockiert, korrigieren. Wenn sie ihn durchlässt, aber Sie unsicher sind, in die „Menschliche Überprüfung“ für den Nutzer aufnehmen. Nicht selbst den Schluss ziehen, dass „es schon okay sein wird“.
Häufige Fehler und Behebungen
| Fehler | Behebung |
|---|---|
| Zeile N … Zeichen, maximal 12 Zeichen pro Zeile | Kürzen oder mit \n an einer semantischen Pause in zwei Zeilen aufteilen |
| 2 Stellen mit {}-Hervorhebung verwendet | Nur die wichtigste Stelle behalten |
| {} nicht paarweise | Jedes { muss ein } haben, nicht zeilenübergreifend |
| Enthält das Extremwort „am besten“ aus dem Werbegesetz | Durch eine belegbare Aussage ersetzen: „Am schnellsten“ → „Ergebnis in 3 Sekunden“ |
Erster Shot muss hook sein | Einen hook an den Anfang setzen |
Der endCard-Shot darf keinen Untertitel haben | caption löschen, den großen Text in params.slogan schreiben |
| Ein unbekanntes Feld vorhanden | Die „verfügbaren Felder“ im Fehler ansehen; die Schreibweise korrigieren (z. B. mockApp verwendet kind, nicht variant) |
| Es gibt kein Symbol namens „xx“ | Aus der Symboltabelle am Anfang von shots.md auswählen |
| Gesamtlänge … muss zwischen 15–45 Sekunden liegen | Shots hinzufügen/löschen oder dur ändern |
| Medien-Datei nicht gefunden | Pfad überprüfen (relativ zum Verzeichnis von storyboard.json) |
| JSON-Parsing-Fehler in Zeile N | Diese Zeile prüfen: fehlendes Komma, abschließendes Komma, doppelte Anführungszeichen " im Untertitel (durch einfache Anführungszeichen oder chinesische 「」 ersetzen) |
| Dieser Satz bleibt N Sekunden auf dem Bildschirm | caption als Array mit 2–3 Sätzen schreiben oder den Shot in zwei aufteilen |
| Es gibt keinen Shot im gesamten Video, der die Kernaktion demonstriert | chat (Frage → Panel-Antwort) oder mockApp (input + Ergebnis) hinzufügen |
Produktname auf der End-Card stimmt nicht mit meta.product überein | brand auf meta.product ändern, buchstabengetreu |
cta geschrieben, aber meta.cta ist leer | Wenn das Briefing eine Bezugsquelle enthält, in meta.cta schreiben und dann übernehmen; sonst cta löschen |
Enthält wörtliches \n | Für Zeilenumbrüche in JSON nur einen Backslash \n verwenden |
| Enthält den Plattformnamen „Gongzhonghao“ (Warnung) | Wenn es ein Produktkategoriename ist: in meta.allowWords aufnehmen; wenn es Traffic-Leitung ist: löschen |
Pflichtfeld meta.action fehlt | Einen Satz schreiben: „Was der Nutzer tut → was das Produkt liefert“ |
Zahl nicht in meta.facts als Quelle auffindbar | Wenn diese Zahl im Briefing gegeben wurde, wörtlich in meta.facts übernehmen (Format {"id":"f1","text":"…"}); wenn nicht, durch eine qualitative Formulierung ersetzen |
| Untertitel enthält Shot-Beschreibungstext (z. B. „Die Karten erscheinen nacheinander“) | Das ist ein Untertitel für das Publikum, keine Schnittanweisung. Durch einen Satz aus Nutzerperspektive ersetzen |
| „einloggen“ ist ein Tippfehler, sollte „anmelden“ heißen | Korrigieren |
| „Klar wie Kloßbrühe“ ist eine übertriebene Zusage | Durch eine maßvolle Formulierung ersetzen, z. B. „Wichtige Informationen sind sichtbar“ |
| Der Shot „YY“ ist für die Branche „XX“ nicht freigegeben | Einen anderen, für diese Branche freigegebenen Shot verwenden oder prüfen, ob meta.industry falsch gewählt ist |
| [B-xxx] Trifft Branchen-Compliance-Regel | Die Anweisung „wie beheben“ im Fehlertext befolgen; Extremwörter mit tatsächlicher Grundlage in meta.allowWords aufnehmen (nur für Warnungen, nicht für Blockaden; Blockaden müssen entfernt werden) |
Wenn kein echter Screenshot vorhanden ist
Bevorzugt mockApp-Shots verwenden (sie sind animiert). Wenn es unerlässlich ist, „hier im Handy tippen“ darzustellen, zuerst einen schematischen Screenshot aus mockApp rendern und dann dem phone-Shot übergeben:
cd <SKILL>/template
npx remotion still src/index.ts Screen <absoluter_Pfad_zum_storyboard_verzeichnis>/screen.png --frame=145 --props=<absoluter_Pfad_zum_storyboard_verzeichnis>/screen-props.json
screen-props.json schreiben als {"type":"mockApp","theme":"<Thema>","dur":5,"params":{...params von mockApp...}}. Siehe <SKILL>/examples/_src/screen-props.json. Dann im phone-Shot "src": "screen.png" schreiben und in meta.disclaimer vermerken: „Demo-Darstellung, Inhalt simuliert“.
Weitere Beispiele (unterschiedliche Strukturen, nach Produkttyp auswählen, nicht die Untertitel kopieren)
<SKILL>/examples/jev.json: B2C Emotional, Branche software (Chat-Demo mit 2 Untertiteln → Dashboard → quickList → endCard; Bezugsquelle „Offizielle Website Android-Version herunterladen“)<SKILL>/examples/ledger.json: Tool-Effizienzsteigerung, Branche software (quickList zu Schmerzpunkten → compare → mockApp „Foto von Quittung → Ergebnis“ → counter → endCard; keinctaauf der End-Card, da das Briefing keine Bezugsquelle enthielt)<SKILL>/examples/meeting.json: B2B Büro, Branche software (Screenshot mit Markierung → simuliertes Interface → compare → steps → endCard; Bezugsquelle „Offizielle Website kostenlose Testversion beantragen“)<SKILL>/examples/en-focus.json: Beispiel fürmeta.lang: "en"(fiktive App, zeigt die englische Untertitel-Schreibweise)- Compliance-Beispiele für andere Branchen (food/ecommerce/education/beauty/travel) in
industries/<industry>/test-brief.md+expected.md:test-briefist ein Beispiel-Briefing,expectederklärt detailliert, welche Stellen im daraus erstellten Storyboard blockiert werden würden und warum. Für das erste Video in einer neuen Branche wird empfohlen, diese beiden Dateien zuerst zu lesen.
Vollständiges Beispiel (examples/ledger.json, durchläuft die Validierung direkt)
{
"meta": {
"title": "省心记账 宣传片(痛点 → 产品 → 3 卖点 → 片尾)",
"product": "省心记账",
"theme": "fresh-light",
"disclaimer": "演示画面,数据为示例",
"action": "拍小票 → 自动填好金额和分类",
"facts": [
{"id": "f1", "text": "试用用户本月比上月多存下约 1260 元(示例数据)"},
{"id": "f2", "text": "演示账本示例条目:外卖 ¥860、奶茶咖啡 ¥326、忘关的自动续费 ¥98、深夜打车 ¥410(示例数据)"},
{"id": "f3", "text": "手动记一笔平均约 5 分钟;用本产品拍照记一笔约 10 秒(示例数据)"},
{"id": "f4", "text": "演示识别结果:午饭 ¥38.5,本月餐饮预算已用 62%(示例数据)"}
]
},
"shots": [
{
"type": "hook",
"dur": 2.5,
"caption": "工资刚到手,\n月底又{见底了}",
"mood": 0.85,
"params": {"visual": "stat", "text": "¥ 0.00", "sub": "这个月花哪了", "badge": "拍张小票就记好", "tone": "bad"}
},
{
"type": "quickList",
"dur": 3.5,
"caption": "钱花哪了,\n却{一笔都想不起}",
"mood": 0.8,
"params": {
"title": "本月去向不明",
"items": [
{"text": "外卖", "tag": "¥860", "tone": "bad", "icon": "bell"},
{"text": "奶茶咖啡", "tag": "¥326", "tone": "warn", "icon": "heart"},
{"text": "忘关的自动续费", "tag": "¥98", "tone": "bad", "icon": "calendar"},
{"text": "深夜打车", "tag": "¥410", "tone": "warn", "icon": "clock"}
]
}
},
{
"type": "compare",
"dur": 4.5,
"caption": "记账这件事,\n{别再靠毅力}",
"mood": 0.45,
"params": {
"mode": "lr",
"left": {"title": "手动记账", "items": ["每笔手动输入", "分类全靠猜", "拖到最后就放弃"], "tone": "bad", "icon": "doc", "stat": "5 分钟", "level": 8},
"right": {"title": "省心记账", "items": ["拍小票自动识别", "自动分好类", "月底一键复盘"], "tone": "good", "icon": "bolt", "stat": "10 秒", "level": 2},
"meterLabel": "麻烦程度",
"verdict": "记一笔只要十秒"
}
},
{
"type": "mockApp",
"dur": 4.5,
"caption": "拍一下小票,\n{金额分类都填好}",
"mood": 0.25,
"params": {
"kind": "editor",
"title": "记一笔",
"source": "示意数据,非真实用户账单",
"input": "拍照:午饭小票",
"button": "识别",
"items": [
{"text": "午饭 ¥38.5"},
{"text": "商家:楼下面馆"},
{"text": "分类:餐饮(自动)"},
{"text": "本月餐饮已用 62%"}
],
"highlight": 3,
"done": "已记好"
},
"note": "核心动作演示:用户拍小票 → 产品给出金额、商家、分类"
},
{
"type": "counter",
"dur": 3,
"caption": "月底一看,\n{居然还有结余}",
"mood": 0.1,
"params": {"to": 1260, "prefix": "¥", "label": "本月比上月多存下", "sub": "示例数据,因人而异", "icon": "money", "tone": "good"}
},
{
"type": "endCard",
"dur": 4,
"mood": 0,
"params": {
"brand": "省心记账",
"slogan": "花出去的每一笔,\n{心里都有数}",
"points": ["拍小票自动记账", "账本只存在你手机里"],
"icon": "money"
}
}
]
}