Communitygithub.com

Produktwerbevideo (promo-video)

Erstelle mit Remotion kostengünstig polierte vertikale Werbevideos – geeignet für Software, Food, E-Commerce, Bildung, Beauty und Reisen. Zweisprachig (Chinesisch/Englisch).

Was ist Produktwerbevideo (promo-video)?

Dieses Skill ermöglicht es, ohne Programmierkenntnisse hochwertige, vertikale Produktwerbevideos (z. B. für TikTok, Reels) zu erstellen. Der Anwender wählt lediglich Kameraeinstellungen und füllt Textinhalte aus – der gesamte technische Workflow (Rendering, Musik, Layout) wird von Remotion und den zugehörigen Skripten übernommen. Das System unterstützt sechs Branchen (Software, Food, E-Commerce, Bildung, Beauty, Reisen) und zwei Sprachen (Chinesisch, Englisch). Es enthält eine umfangreiche Validierung, die häufige Fehler wie fehlerhafte Metadaten, unzulässige Werbeaussagen oder inkonsistente Zahlen abfängt. Der Workflow ist klar: Branche und Sprache festlegen, Briefing mit vorgegebenen Templates einholen, Storyboard mit 5–9 Shots (festgelegte Typen wie Hook, MockApp, Compare) erstellen, validieren und rendern. Der Fokus liegt auf der Vermittlung der Kernfunktion des Produkts, nicht auf technischen Details wie Koordinaten oder Farbwerten. Es wird vor dem Gebrauch von „Copy & Paste“ von Beispieltexten gewarnt, stattdessen sollen produktspezifische, authentische Formulierungen verwendet werden.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add Finderchangchang/promo-video-skill

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

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

  1. 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 auf en setzen (siehe Schritt 5 für die Verwendung).
    • Für Branchen, die NICHT software sind → zuerst <SKILL>/industries/<industry>/recipe.md lesen (für englische Projekte recipe.en.md): Dort stehen die empfohlenen Shot-Kombinationen für diese Branche, eine brief-template.md (welche Fragen dieser Branchen-Briefing-Bogen enthalten soll), und test-brief.md / expected.md (Beispiele für Compliance-Rotlinien). Wer diesen Schritt überspringt, riskiert Inhalte, die abgewiesen werden.
  2. Briefing erfassen. Die Kategorien des entsprechenden brief-template.md verstehen; wenn Angaben wie „Produktname / Ein-Satz-Value-Proposition / Schmerzpunktszenario / Kernaktion / 2–4 Verkaufsargumente“ fehlen, zuerst nachfragen, keine Daten oder Funktionen erfinden.
    • meta.product wird eins zu eins aus dem Briefing übernommen; im gesamten Video (Hook-Kapsel, End-Card Brand) wird nur dieser eine Name verwendet. Der brand auf 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; die cta auf 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. Mit params.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 compare dürfen stat und items derselben 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.notices als String-Array (max. 3 Einträge) angeben; sie werden in einer Zeile am unteren Rand angezeigt.
  3. Verzeichnis anlegen: promo/<Produktname_englisch>/; das Storyboard (storyboard.json) in promo/<Produktname_englisch>/. Screenshots/Aufzeichnungen/Logos des Nutzers werden in dasselbe Verzeichnis kopiert.
  4. 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-premium Wenn eine Markenfarbe vorhanden ist, meta.brandColor (#RRGGBB) eintragen; sie ändert nur die Akzentfarbe.
  5. 5–9 Shots auswählen (Shot-Beschreibungen siehe <SKILL>/shots.md, eine Übersicht der 18 Shots oben). hook MUSS der erste Shot sein (2–3 Sekunden), endCard MUSS der letzte Shot sein (4 Sekunden). Ein Shot muss die Kernaktion demonstrieren (das in Schritt 2 festgelegte meta.action); die Validierung wird dies prüfen: chat → Nachrichten + Panel (Frage → Antwort); oder mockApp → Eingabe (Nutzer gibt etwas ein / stellt eine Frage) + Ergebnis (Dashboard-Stat, Editor-Items, Done); wenn ein Screenshot vorhanden ist, phone verwenden. meta.industry bestimmt, welche Shots verwendet werden können (siehe industries/<industry>/rules.json unter enabledShots, 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-/Anerkennungskarte
    • beforeAfter: Vorher-Nachher-Schieberegler (nur für Beauty freigegeben, erfordert consent: true + retouched: false) Shots entsprechend des Produkttyps auswählen, keine feste Vorlage verwenden, features ist nicht obligatorisch. Zwei harte Anforderungen (die Validierung erinnert daran):
    • Mindestens ein Shot in der Mitte muss aus {compare, steps, phone, meter} stammen;
    • quickList und counter nicht gleichzeitig verwenden (wenn beide verwendet werden, wird das Video zum Schablonen-Stil: Hook → quickList → mockApp → counter → endCard). Für die Branche software mögliche Kombinationen (eine auswählen, dann an das Produkt anpassen; für andere Branchen direkt die empfohlenen Strukturen in industries/<industry>/recipe.md verwenden):
    • 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 im mood zwischen benachbarten Shots sollte nicht mehr als 0,5 betragen (dazwischen einen Übergangsshot einfügen), sonst wirkt der Hintergrundwechsel zu abrupt.
  6. Untertitel schreiben (caption pro 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 \n umbrechen; jede Zeile ≤12 chinesische Schriftzeichen (Buchstaben/Ziffern zählen als halbe). Bei meta.lang: "en" werden englische Untertitel umgerechnet (ca. 1,8× der chinesischen Begrenzung); die genauen Zahlen stehen in docs/shots/<type>.en.md.
    • {} um die 2–5 wichtigsten Schriftzeichen setzen, sie werden in der Akzentfarbe angezeigt; maximal eine Stelle pro Untertitel.
    • Der caption des Hooks = Titel des Covers; die Schmerzpunkte oder eine kontraintuitive Frage des Nutzers formulieren.
    • Die endCard hat keinen caption; der Slogan wird in params.slogan geschrieben.
    • Derselbe Untertitel darf maximal 5 Sekunden stehen bleiben. Bei Shots, die länger als 5 Sekunden sind (z. B. 8–10 Sekunden bei chat), den caption als 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 ".
  7. mood festlegen (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.
  8. 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 Python open(p, "w", encoding="utf-8"). Nicht echo >, Out-File (5.1) für chinesische Zeichen verwenden. Das panel.replies bei chat enthä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 kein typing verwenden.
  9. Validieren, die Fehler einzeln beheben, bis der Durchlauf fehlerfrei ist:
    node <SKILL>/scripts/validate.mjs promo/<Produktname>/storyboard.json
    
    Das Fehlerformat ist „Shot N (Typ) Feld: Problem → wie beheben“. Nach der „wie beheben“-Anleitung handeln. Die Ergebnisse sind in drei Kategorien unterteilt:
    • 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.
  10. Video rendern (dauert ca. 2 Minuten, Musik wird automatisch generiert):
    node <SKILL>/scripts/make.mjs promo/<Produktname>/storyboard.json --out promo/<Produktname>
    
    --out ist Pflicht (für Tests stattdessen --round <Rundennummer> verwenden; die Ausgaben landen einheitlich in tests/<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.
  11. Zuerst das Ende von report.txt lesen („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). Danach sheet.png und check/ anhand der folgenden Liste selbst prüfen. Bei Problemen das storyboard.json korrigieren und zu Schritt 9 zurückkehren.
  12. Auslieferung: Pfade zu video.mp4 und sheet.png an 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: beforeAfter nur in Beauty; Zitate in reviewCard sind Originaltext, nicht übertrieben umformuliert.

Checkliste vor Veröffentlichung (dem Nutzer bei Auslieferung mitgeben, nicht nur selbst durchgehen)

  1. 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 in reviewCard/credCard sind buchstabengetreu aus dem Briefing? Plattformrichtlinien auf dem neuesten Stand? Gewerbeberechtigungen vollständig?
  2. Ist meta.industry richtig gewählt (sonst sind die verfügbaren Shots und Compliance-Regeln falsch)?
  3. Betrifft das Video echte Personen, Kundenbewertungen, Vorher-Nachher-Fotos: Liegt eine schriftliche Einwilligung der Betroffenen vor (consent/retouched sind nur Validierungsfelder; die tatsächliche Einholung der Zustimmung ist Aufgabe des Nutzers, nicht der Validierung).
  4. 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?
  5. 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 hook sein; endCard MUSS 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.
  • endCard brand = meta.product; endCard cta = meta.cta (wenn das Briefing keine Angabe enthält, beide weglassen).
  • Im Bildschirmtext darf kein Backslash vorkommen (ein \\n in JSON wird wörtlich als \n auf 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.allowWords aufnehmen. 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.allowWords eintragen.
  • Zahlen mit Einheit (Zeit/Prozentsatz/Multiplikator/Personenzahl/Geldbetrag) müssen identisch in meta.facts auffindbar 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.facts auffindbar 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

FehlerBehebung
Zeile N … Zeichen, maximal 12 Zeichen pro ZeileKürzen oder mit \n an einer semantischen Pause in zwei Zeilen aufteilen
2 Stellen mit {}-Hervorhebung verwendetNur die wichtigste Stelle behalten
{} nicht paarweiseJedes { muss ein } haben, nicht zeilenübergreifend
Enthält das Extremwort „am besten“ aus dem WerbegesetzDurch eine belegbare Aussage ersetzen: „Am schnellsten“ → „Ergebnis in 3 Sekunden“
Erster Shot muss hook seinEinen hook an den Anfang setzen
Der endCard-Shot darf keinen Untertitel habencaption löschen, den großen Text in params.slogan schreiben
Ein unbekanntes Feld vorhandenDie „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 liegenShots hinzufügen/löschen oder dur ändern
Medien-Datei nicht gefundenPfad überprüfen (relativ zum Verzeichnis von storyboard.json)
JSON-Parsing-Fehler in Zeile NDiese 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 Bildschirmcaption als Array mit 2–3 Sätzen schreiben oder den Shot in zwei aufteilen
Es gibt keinen Shot im gesamten Video, der die Kernaktion demonstriertchat (Frage → Panel-Antwort) oder mockApp (input + Ergebnis) hinzufügen
Produktname auf der End-Card stimmt nicht mit meta.product übereinbrand auf meta.product ändern, buchstabengetreu
cta geschrieben, aber meta.cta ist leerWenn das Briefing eine Bezugsquelle enthält, in meta.cta schreiben und dann übernehmen; sonst cta löschen
Enthält wörtliches \nFü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 fehltEinen Satz schreiben: „Was der Nutzer tut → was das Produkt liefert“
Zahl nicht in meta.facts als Quelle auffindbarWenn 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ßenKorrigieren
„Klar wie Kloßbrühe“ ist eine übertriebene ZusageDurch eine maßvolle Formulierung ersetzen, z. B. „Wichtige Informationen sind sichtbar“
Der Shot „YY“ ist für die Branche „XX“ nicht freigegebenEinen anderen, für diese Branche freigegebenen Shot verwenden oder prüfen, ob meta.industry falsch gewählt ist
[B-xxx] Trifft Branchen-Compliance-RegelDie 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; kein cta auf 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ür meta.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-brief ist ein Beispiel-Briefing, expected erklä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"
      }
    }
  ]
}

Verwandte Skills