Viva Video
Aus einem Produktdokument einen Film erstellen, der präzise spricht, klar zeigt und dessen jedes Frame durch Code generiert wird.
Unterschied zu cinematic-product-video: Dieses verwendet SeedDance für filmische Aufnahmen, ist eher markenorientiert. Dieses hier verwendet überhaupt kein generiertes Material, alles Code-Rendering, informationsorientiert. Beide Skills sind unabhängig und nicht kombinierbar.
Geliefert wird der fertige Film, kein Storyboard. Wenn nur Änderungen an Spezifikationen oder Prompts verlangt werden, endet die Arbeit mit Dateirevision und -validierung; es wird keine kostenpflichtige Generierung oder vollständiges Rendering gestartet.
Erster Schritt: Das Dokument verstehen. Ohne dies wird der ganze Rest falsch
Der Hauptgrund für unklare Filme ist nicht das Rendering, sondern dass man mit dem Layout beginnt, bevor das Dokument durchdrungen ist. Der Abschnitt
comprehensioninfilm-rules.yamlist blockierend;compose_spec.pywird prüfen.
Drei Dokumente müssen erstellt werden
| Datei | Inhalt | Zweck |
|---|---|---|
UNDERSTANDING.md | Was ist das, wessen Problem wird gelöst, Ursache-Wirkungs-Kette, Schlüsselzahlen mit Messbedingungen, drei Fragen, die der Zuschauer nach dem Anschauen beantworten kann, was das Dokument nicht behauptet, unbekannte Punkte mit unknown markieren | Verhindert, dass der Film falsche oder übertriebene Aussagen macht |
CLAIMS.md | Jede Schlussfolgerung in einer Zeile: Behauptung / Quellenangabe / Mechanismus / Nutzen / Einschränkungen / visueller Beleg / riskante Formulierungen | Jeder Satz im Film muss auf diese Tabelle zurückgeführt werden können |
CONCEPT_MAP.md | Dokumentenabschnitte → Behauptungen → Mechanismus und Nutzen → visuelle Hauptelemente und Aktionen → verbotene Fehlinterpretationen → erforderliche Beweise für die Beurteilung | Übersetzt „was erzählen“ in „was zeichnen“ |
Gleichzeitig die Schlussfolgerungen in content.yaml unter content.understanding eintragen; compose_spec.py wird dies validieren.
Nachdem das Dokument geschlossen wurde, diese fünf Fragen beantworten
Wenn man sie nicht beantworten kann, zurückgehen und noch einmal lesen. Nicht mit Fragezeichen weitermachen.
- Welches Problem löst dieses Ding, wie haben es die Benutzer bisher gemacht, wo liegen die Schmerzen?
- Den Mechanismus als eine Ursache-Wirkungs-Kette darstellen, keine Sprünge.
- Welche Zahl beweist die Schlussfolgerung am besten, unter welchen Bedingungen wurde sie gemessen, gilt sie noch unter anderen Bedingungen?
- Womit könnte der Zuschauer es am ehesten verwechseln, wie kann das Bild dies verhindern?
- Welche Aussagen im Dokument sind reine Marketingfloskeln und dürfen nicht als Fakten verbreitet werden?
Nach dem Verständnis neu organisieren, nicht das Inhaltsverzeichnis kopieren
Die Reihenfolge: Problem → Kosten der alten Methode → Neuer Mechanismus → Beweise → Anwendungsbereich → Nächste Schritte. Jede Szene behandelt nur eine Schlussfolgerung; zuerst die Schlussfolgerung, dann den Mechanismus, dann die Beweise. Fachbegriffe beim ersten Auftreten in einem Satz erklären.
Verboten: „deutlich verbessert“, „umfassend optimiert“, „signifikant optimiert“ anstelle von konkreten Zahlen aus dem Dokument; Zahlen erfinden, wenn das Dokument keine liefert; eine Roadmap als bereits ausgeliefert darstellen; Beispielcode schöner umschreiben, aber nicht lauffähig machen; einen Abschnitt nicht verstehen und trotzdem nach dem Titel raten.
compose_spec.py scannt diese Phrasen und meldet einen Fehler.
Kontrollpunkt
Vor dem Schreiben von content.yaml dem Benutzer die UNDERSTANDING.md, die Kapitelübersicht, eine Schlussfolgerung pro Kapitel und den geplanten visuellen Prototyp pro Kapitel vorlegen.
Wenn die Faktenebene nicht freigegeben ist, wird die visuelle Ebene nicht betreten. Diese Nacharbeit ist am billigsten; die Nacharbeit am fertigen Film ist am teuersten.
Methodenquelle: Übergangsentscheidungstabelle, Fokus-Dreier-Set, Energie-Skelett, Drei-Meter-Test, chinesische Typografie – diese Abschnitte sind entlehnt aus huashu-design (Herr Hua). Was übernommen wurde, was gesehen, aber nicht übernommen wurde, warum nicht, wird in
references/borrowed-from-huashu-design.mdfestgehalten.
Dreischichtige Struktur, nur die mittlere Schicht ändert sich jedes Mal
| Schicht | Datei | Bei jedem Filmdreh |
|---|---|---|
| Regelschicht | references/film-rules.yaml | Nicht ändern. Was muss erreicht werden: Dokument verstehen, ein Frame eine Sache, Voice-Over und Informationseinheit 1:1 zugeordnet, Besprochenes leuchtet, keine nackten Schnitte, Dichteuntergrenze, Rendering-Invarianten R01–R30, Abnahmekriterien Q01–Q38, Messmethoden und Schwellwerte |
| Themenpaket | themes/<name>/theme.yaml | Nur bei Änderung des Looks ändern. Wie es aussieht: Farbableitung, Schriftgrößen, Koordinaten, Zeichenweise von Karten und Navigation, Easing-Kurven, Übergangsauswahl, Tintenmenge des Fokus, BPM und Instrumentierung der Musik |
| Produktinhalt | Deine content.yaml | Nur dies schreiben. Verständnis, Fakten, Kapitel, Behauptungen, Metriken, Markenressourcen, Aussprachetabelle, Erzählweise pro Kapitel und Informationseinheiten |
| Syntheseprodukt | video-spec.resolved.yaml | Nicht von Hand ändern, vom Skript generiert |
Die Trennlinie zwischen Regelschicht und Themenpaket ist eine einzige: Ein Look-Wechsel darf nicht die Regel „Voice-Over muss mit dem Bild übereinstimmen“ ändern.
Die Kriterien bleiben in der Regelschicht, das Aussehen wird dem Themenpaket überlassen; theme_contract schreibt beide Seiten als maschinenlesbare Checkliste. Wenn ein Paket Schlüssel vermisst, Grenzen überschreitet oder die Kriterien selbst ändert, wird validate_spec.py dies sofort ablehnen.
Das Standardpaket ist daylight (fast weißer Hintergrund + weiße Karten + Markenfarbverlauf mit drei Stoppunkten), der Standard-Look des Skills. Wie man ein neues Paket erstellt, siehe themes/README.md.
SKILL=~/.agents/skills/viva-video
cp $SKILL/templates/content.example.yaml ./content.yaml
# Zuerst Dokument verstehen, understanding ausfüllen; dann restliche TODOs
python3 $SKILL/scripts/compose_spec.py ./content.yaml -o ./video-spec.resolved.yaml # --theme <paketname> für anderen Look
python3 $SKILL/scripts/validate_spec.py ./video-spec.resolved.yaml --self-test
examples/content.viva-video.yaml ist ein Ausfüllbeispiel (der eigene Release-Film von viva-video 1.0, 7 Kapitel).
Sprach- und Videomodelle: Der Benutzer gibt, was er hat; wenn nicht, verwende nur die eigenen Fähigkeiten
Der Skill liefert keine Adressen oder Schlüssel für Sprach- oder Videomodelle mit.
- Wenn der Benutzer erklärt, wie sein Sprachsynthese-, Spracherkennungs- oder Videomodell aufgerufen wird (Befehl, API-Dokumentation, vorhandenes Skript zählt): Verpacke es in einen Befehl, schreibe ihn in
providers.json. Danach verwendentts.mjs,pron_calibrate.mjs,asr_check.mjs --backend commandalle diesen Befehl. Schlüssel bleiben nur in Umgebungsvariablen oder in der eigenen Konfiguration des Benutzers, nicht in Projektdateien, Logs und Nachrichten. - Wenn der Benutzer nichts sagt: Verwende nur die Fähigkeiten, die der Agent selbst hat. Wenn ein Sprachwerkzeug in der Umgebung vorhanden ist, verwende es; wenn nicht, erstelle einen Film nur mit Untertiteln, ohne Voice-Over, und markiere die Ausspracheprüfung als
not_tested. Errate oder suche keine Adressen und Schlüssel von Diensten.
Format, Suchreihenfolge und Fallback-Tabelle siehe references/providers.md.
Drei erste Schritte beim Produktwechsel, die Reihenfolge ist unveränderlich
Eins: Aussprache festlegen
Chinesische TTS liest „Rspack“ als ein englisches Wort, das „s“ wird verschluckt – gemessene Rücktranskription ergibt „Spac“.
Lösung: TTS liest buchstabiert, nicht den Namen in chinesische Zeichen umwandeln. Schreibweise: RS + Leerzeichen + restliches englisches Wort.
| Anzeige | An TTS gesendet | Ausgesprochen |
|---|---|---|
| Rspack | RS pack | R-S-pack |
| Rsbuild | RS build | R-S-build |
| Rstest | RS test | R-S-test |
| Rsdoctor | RS doctor | R-S-doctor |
Gemessen am 2026-11-04 (eine chinesische Frauenstimme, Geschwindigkeit 1.24, nach Synthese mit lokalem faster-whisper rücktranskribiert):
| Schreibweise | Rücktranskription | Beurteilung |
|---|---|---|
Rspack | Spac | Nein, s verloren |
RS pack | RSPAC | Übernommen, Gesamtlänge aller vier Namen 7.78s |
R S pack | RS Pack | Brauchbar, etwas länger |
R 斯 pack | OSPAC | Nein, das chinesische Zeichen „斯“ zieht das vorherige R in die Irre |
R-S-pack | RS Pack | Nein, Bindestrich fügt Pause ein, Satz 1.5s länger |
而斯派克 | 而斯派克 | Nein, vollständig sinisiert, englisches Wort verschwunden |
Einheiten müssen ausgeschrieben werden: Gemessen: 915.8 ms wird als „915.8 Meter“ gelesen. Schreibe „915.8 Millisekunden“.
pronounce.py macht dies automatisch (nur bei Einheiten nach Zahlen).
Buchstabenabkürzungen (SSR / BFF / SWC / CLI), Dezimalzahlen, Prozentzahlen, Versionsnummer 3.0 werden alle korrekt gelesen, nicht unnötig umschreiben.
python3 scripts/pronounce.py --self-test # 8 Tests
python3 scripts/pronounce.py "Analyse dauerte von 915.8 ms auf 51.6 ms."
node scripts/pron_calibrate.mjs --terms terms.json # Bei Produkt-/Stimmwechsel messen und Schreibweise wählen
node scripts/asr_check.mjs --spec video-spec.resolved.yaml --voice voice/
Bei Stimmwechsel, Geschwindigkeitswechsel oder neuen Fachbegriffen immer zuerst pron_calibrate.mjs laufen lassen und messen, nicht die obigen Schlussfolgerungen blind übernehmen. Unterschiedliche Stimmen lesen Buchstaben unterschiedlich.
Ohne erneuten Test darf die Aussprache nicht als bestanden markiert werden; ASR-Bestätigung bedeutet nicht natürlichen Höreindruck, ungehört mit not_tested markieren.
Zwei: Thema-Farbe und Farbverlauf festlegen
python3 scripts/theme_resolve.py --svg brand/logo.svg --out qa/theme-resolution.json
python3 scripts/theme_resolve.py --hex '#F93920'
Nach design.theme.resolution_order: Benutzervorgabe → Marken-SVG → Webseiten-CSS-Variable → Dokument-Dekorationsfarbe → Fallback.
Die erhaltene Rohfarbe zuerst in OKLCH konvertieren, Helligkeit auf 0.45–0.62, Sättigung auf 0.12–0.22 begrenzen, Farbton beibehalten. Bei Überschreitung von sRGB Sättigung reduzieren und zuordnen, kein kanalweises Beschneiden – Beschneiden ändert den Farbton und macht die Normalisierung zunichte.
Das Drei-Stopp-Farbverlaufschema bewegt sich entlang des Farbkreises in dieselbe Richtung, in Richtung des Magenta-Ankers (H=350°), die Spanne auf 55°–86° begrenzen, secondary bei 40%. Eine Bewegung in beide Richtungen lässt den Verlauf in der Mitte umkehren, sieht aus wie ein Fehler. Wenn man die Primärfarbe des Referenzfilms eingibt, reproduziert man seine eigenen #376CFF → #8E33F2 → #E3429B.
Zwei Rampen: Titel verwenden die vollgesättigte Rampe, große Zahlen ≥96px eine hellere Stufe (L +0.13, C −0.06) – große Flächen, volle Sättigung würde den Titel überwältigen.
Kontraststufen: Textkörper 4.5, große Buchstaben in Markenfarben 3.0, Hauptzahlen ≥96px 2.3 (Referenzfilm selbst gemessen 2.37–2.86, strengere Werte würden den gesamten Verlauf trüben).
Rot/Grün/Orange sind semantische Farben, nehmen nicht an der Ableitung teil. Verwende Error-Rot nicht als normalen Containerrahmen oder Dekoration.
Drei: Für jedes Kapitel ein visuelles Archetyp und eine Erzählweise wählen
Visuelle Archetypen aus den acht in scene_language.archetypes wählen: Abhängigkeitsgraph, Code plus Beziehungen, Anfrage-Antwort, Erst entdecken dann anfragen, Vorher-Nachher-Metriken, Fähigkeitsmatrix, Zustandsautomat, Schichtenarchitektur. Zwei aufeinanderfolgende Kapitel dürfen sich nicht wiederholen.
Erzählweise (explanation_mode) aus explanation_modes.vocabulary wählen, bestimmt, ob und wie diese Seite sich bewegt. Zuerst den Informationstyp bestimmen, dann die Auswahltafel konsultieren (siehe Abschnitt „Wie man abstrakte Informationen präsentiert“ unten).
Informationseinheiten pro Kapitel 3–5 kurze Tags schreiben; dies ist sowohl die Grundlage für die Dichteuntergrenze als auch die Obergrenze für „zu viel Inhalt in einem Bild“.
Alle drei Punkte werden von compose_spec.py validiert.
Layout: Voll oder nicht voll, verteilt oder nicht
Der Titel ist immer zweiteilig: „Vorbereitung, Schlussfolgerung“
Der erste Teil in normaler Tinte, der zweite Teil vollflächig im Farbverlauf. Die Grenze kann nur an Satzzeichen liegen; der Schlussfolgerungsteil nimmt 35%–70% ein.
Einfach, linear, | Jeder Schritt einzeln gelesen ergibt ebenfalls Sinn
Einmal deklariert, | Laufzeitprüfung und Dokumentation automatisch bereit
Gleiche Maschine gemessen, | Läuft mehr, schneller, sparsamer
In content.yaml als headline_lead + headline_emphasis schreiben; compose_spec.py validiert Anteil und Grenze.
Beachte: Dies ist etwas anderes als title (Kapitelname): Der Kapitelname erscheint auf der Kapitelseite und in der Navigation; headline ist die große Überschrift der Inhaltsseite.
Verlaufsbudget: Maximal 1 Titel + 1 Hauptzahl + 2 Schlüsselwörter pro Seite. Darüber hinaus ist es kein Hervorhebungssignal mehr. Verläufe sind nicht auf Schrift <32px erlaubt (gemessen: Bandbrüche), kein Strich, Schatten, Leuchten, keine Bewegung.
Slots zuerst füllen, Schlüsselinhalte später geben
Das erste Frame einer Szene zeichnet alle Slots – Containerrahmen, Slot-Titel (Chip + Titel + Trennlinie), Inhalts-Skeleton. Danach werden nur noch Inhalt und Transparenz geändert, die Bounding-Boxen bleiben unverändert. Schlüsselinhalte (Zahlen, Code, Tags) bleiben, bis das Voice-Over sie erwähnt.
Diese Regel löst drei Dinge gleichzeitig: Das Layout ist ab dem ersten Frame voll; der Zuschauer sieht keine leere Seite, auf der „der Inhalt noch nicht gewachsen ist“; während des Füllens gibt es kein Zittern durch Neuanordnung; der erste Blick erfasst die Struktur dieser Seite und weiß, was gleich besprochen wird.
Das Skeleton muss einen Titel oder eine Platzhalterstruktur haben, kein reines leeres abgerundetes Rechteck.
Die Slot-Köpfe dürfen nicht mit dem Inhalt warten. Ein am 2026-11-05 gemessener Fehler: feature und stage-Slot-Titel waren an das Enthüllungsereignis des Inhalts gebunden, was dazu führte, dass die beiden unteren Karten zu Beginn der Seite reine weiße Rechtecke waren. Der Kopf gehört zum Container, der Inhalt zum Beat.
Diese Regel hat eine pixelgenaue Beurteilung (gemessene Hälfte von R18): Das größte leere Rechteck im Inhaltsbereich des Szenen-Eröffnungsframes (nach dem Übergang) ≤ 0.26. Nur das Standbild zu messen reicht nicht aus – auf dem Standbild ist die Seite natürlich voll, man sieht nicht den halbleeren Zustand der ersten acht Sekunden.
Noch nicht befüllte Slots nicht abdunkeln. Siehe unten im Abschnitt „Fokus“: Wenn man leere Slots auch auf die Unschärfe-Stufe setzt, liest die Seite sofort als „noch nicht gewachsen“ – genau das Problem, das die vorab zugewiesenen Slots lösen sollen. Nachdem leere Slots von 0.38 auf 0.80 erhöht wurden, sank das größte leere Rechteck in den Eröffnungsframes von sieben Szenen von 0.29–0.62 auf 0.058–0.199.
Inhalt ohne Rahmen muss gebündelt werden
Benutzerfeedback: „Ohne Karten ist es sehr verstreut.“ Die Regel wurde verschärft:
- Jede Informationseinheit im Inhaltsbereich muss zu einem Container oder einer beschrifteten Gruppe gehören.
- Erlaubt ohne Rahmen sind nur drei Arten: Eine Liste von Punkten direkt unter dem Container, ein Schlusssatz am unteren Seitenrand, ein Kicker und Titel oben.
- Rahmenlose Punkte müssen die linke Kante und Breite mit dem benachbarten Container teilen, maximal 7 Spalten breit, maximal 4 Zeilen, Format: „Kreisnummer + fette Kurzüberschrift + Doppelpunkt + Text“ in derselben Zeile beginnend.
- Alle rahmenlosen Textblöcke auf derselben Seite dürfen nur eine linke Kante haben.
- Wenn rahmenloser Inhalt mehr als 40% der Inhaltsbereichsfläche einnimmt, muss er in einen Container aufgenommen werden.
Verboten: Drei oder vier Textabsätze jeweils zentriert mit Abstand; Abstand durch leere Zeilen erzeugen, um „zu füllen“; zwei oder mehr verschiedene linke Kanten auf einer Seite.
Dichteuntergrenze (Inhaltsbereich [120, 280, 1680, 610])
| Metrik | Untergrenze | Messung |
|---|---|---|
| Containerbelegung | ≥ 0.55 | Bounding-Box der Szenenobjekte |
| Vertikale Spannweite | ≥ 0.72 | Bounding-Box der Szenenobjekte |
| Horizontale Spannweite | ≥ 0.86 | Bounding-Box der Szenenobjekte |
| Maximales leeres Rechteck | ≤ 0.14 | Bounding-Box der Szenenobjekte |
| Maximaler leerer Streifen | ≤ 150 Designpx | Bounding-Box der Szenenobjekte |
| Unabhängige Informationseinheiten | ≥ 3 | Szenenobjektliste |
| Maximales leeres Rechteck im Standbild | ≤ 0.20 | Kantenbild des Standbildes |
Die letzte Regel ist pixelgenau, Kapitelseiten/Deckblätter/Schluss sind ausgenommen. Nicht „Anteil der Nicht-Hintergrund-Pixel“ verwenden: Dieses visuelle System besteht aus weißen Karten auf fast weißem Hintergrund, die Kartenfüllung wird zur modalen Farbe, die Metrik würde sich umkehren (Referenzfilm gemessen 0.144, die ästhetisch schlechtere Version 0.419, die Richtung ist völlig falsch). Das Kantenbild wird davon nicht beeinflusst.
Wenn der Inhalt nicht ausreicht, nach density.escalation auffüllen, Schritt 0: Zuerst prüfen, ob Slots nicht vorab zugewiesen wurden oder Inhalt nicht in Container aufgenommen wurde – die meisten „leeren“ Stellen sind dies, nicht zu wenig Inhalt.
Direktes Leerlassen verboten. Vergrößerung der Schrift zum Auffüllen verboten. Partikel, Leuchteffekte, geometrische Blöcke als Informationseinheiten tarnen verboten.
Fenster-Hülle nach Informationsgehalt entscheiden, nicht nach Vorliebe
Verwenden, wenn: Der Inhalt gehört natürlich zu einer bestimmten Oberfläche (Datei, Konfiguration, Terminal, Editor, Dashboard, Bericht); ≤3 Informationseinheiten wirken spärlich und benötigen eine Randbegrenzung; eine Besitzbeziehung „Dateiname + Inhalt“ ausgedrückt werden soll.
Nicht verwenden, wenn: Eine genauere Darstellungsform existiert und den Inhaltsbereich füllen kann; die beiden vorherigen Einstellungen bereits kontinuierlich verwendet wurden; der Inhalt ein abstrakter Mechanismus und keine konkrete Oberfläche ist.
Wenn verwendet, muss es gefüllt sein: Inhaltsfüllungsrate ≥ 78%. Fenstertitel mit echten Dateinamen, nicht „Beispiel“ oder „Demo“. Fensterszenen im gesamten Film ≤ 50%, nicht drei aufeinanderfolgende Szenen mit derselben Komposition.
Beziehungsdiagramme und Flussdiagramme
Mindestens 4 Knoten und 3 Kanten. Knoten müssen einen Titel und eine Zeile Erklärung haben. Jede gerichtete Kante muss einen Aktionsbezeichner und einen Pfeil haben, beide Enden am Rand des realen Objekt-IDs verankert, lose Enden sind ein Fehler. Muss ein Erklärungsfeld enthalten, das 30%–42% der Inhaltsbereichsbreite einnimmt: Pseudo-Code, Konfigurationssnippet, Zustandstabelle, Nachrichtenbeispiel, Indikatorleiste, Schrittsequenz (zur Auswahl). Pseudo-Code 5–12 Zeilen, jede Zeile entspricht einem Knoten oder einer Kante im Diagramm, beim Rendern synchron hervorheben.
Metrikseiten
Mindestens 2 unterstützende Inhalte zusätzlich zum Hauptwert: Vorher-Nachher-Vergleichsdiagramm, Komponentenzerlegung, Testbedingungsblock, zweite Metrik desselben Mechanismus, reale Konfiguration, die die Metrik erzeugt hat, Basisfall-Definition. Diagramme teilen sich eine Basislinie, Achsen sind beschriftet und mit Werten versehen. Unterschiedliche Einheiten (qps und ms) müssen separate Diagramme oder Achsen haben. Reihenfolge: Zuerst den Originalwert und die Testbedingungen anzeigen → Änderung zum neuen Wert → Verbesserung setzt sich fest → stabil bleiben. Zahlen in monospace, Einheiten fest, nur einmal hervorheben.
Chinesische Typografie: Das westliche System kann nicht einfach übernommen werden
| Regel | Warum | |
|---|---|---|
| Zeilenhöhe | Display 1.15, Titel 1.35, Text 1.65 | Chinesische Zeichen sind ausgefüllte Quadrate, haben keinen natürlichen Zwischenraum wie westliche Kleinbuchstaben. Zu geringer Zeilenabstand ergibt eine unleserliche Masse. Chinesisch insgesamt ca. 0.2 höher als Westlich |
| Buchstabenabstand | Display (>60px) −0.02em, Titel 0, Text 0 | Chinesische Zeichen haben natürlicherweise gleichmäßigen Abstand. Titel mit positivem Buchstabenabstand wirken locker, Display mit negativem Abstand stoßen Striche aneinander. Nur für rein westliche Großbuchstaben-Etiketten sind 0.08–0.15em nötig |
| Zeilenlänge | Eine Zeile 22–38 Zeichen, optimal 28–32 | Chinesische Zeichen haben hohe Dichte, dieselbe Breite enthält mehr Informationen als Westlich. Zu lange Zeilen führen zum Verlust der Zeile beim Zurücklesen |
| Schriftstapel | Westlich vorne, Chinesisch hinten | Zeichenweises Matching: Westliche Schriftarten enthalten keine CJK-Codepunkte, chinesische Zeichen fallen natürlich auf die chinesische Schriftart zurück. Umgekehrt werden westliche Zeichen von der hässlichen westlichen Schriftart der chinesischen Schriftart verschluckt |
| Hervorhebung | Schriftstärke ändern oder Hintergrundfarbe | Chinesisch hat keine Kursivschrift, synthetische Kursivschrift durch Browser/Renderer verzerrt chinesische Zeichen. Synthetische Fettschrift ebenfalls verboten |
| Anführungszeichen | Eckige Anführungszeichen « » | Gebogene Anführungszeichen sind in chinesischen Schriftarten im Vollbreiten-Format und westlicher Form, visuell schwebend |
| Zahlen | Westliche Schriftart + tabular-nums | Sonst sind 1 und 8 nicht gleich breit, Datenspalten zittern horizontal |
Monospace-Schriftarten müssen auf chinesische/japanische/koreanische Glyphen geprüft werden. JetBrains Mono hat kein CJK; chinesische Kommentare in Code-Fenstern werden zu Tofu-Blöcken. Die Mono-Schriftfamilie muss explizit einen chinesischen Fallback enthalten.
Drei-Meter-Test
Bei einem beliebigen Standbild muss das größte Wort im Bild aus drei Metern Entfernung lesbar sein; das Standbild auf Smartphone-Größe verkleinern, muss immer noch lesbar sein. Zuschauer schenken jedem Frame eines Videos weniger Aufmerksamkeit als einem Standbild, Schrift muss daher größer, nicht kleiner sein. Diese Regel und die Dichteuntergrenze sind gegenseitige Ober- und Untergrenzen: Die Dichteuntergrenze verhindert Leere, der Drei-Meter-Test verhindert, dass Schrift verkleinert wird, um mehr Inhalt unterzubringen.
Ein Frame nur eine Sache
Benutzerfeedback: Inhalt, Effekte und Voice-Over müssen Informationen klar vermitteln, nicht vage sein, nicht zu viel Inhalt in einem Bild. Jede Regel in diesem Abschnitt kann von
motion_audit.pybeurteilt werden, es sind keine ästhetischen Empfehlungen.
Informationsbudget: Nicht nur Untergrenze, auch Obergrenze
| Wert | Erklärung | |
|---|---|---|
| Informationseinheiten-Untergrenze | 3 | Darunter ist die Seite leer |
| Informationseinheiten-Obergrenze | 5 | Darüber fällt der 2-Sekunden-Standbild-Test durch |
| Textmenge im Inhaltsbereich | ≤ 120 Zähleinheiten | Chinesische Zeichen einzählen, englische Wörter einzählen |
| Neu eingehende Informationen pro Beat | 1 Stelle | Eine Stagger-Gruppe zählt als eine Stelle |
Zählung nach dem äußersten Container oder der beschrifteten Gruppe, Unterelemente innerhalb der Gruppe werden nicht einzeln gezählt. Referenzfilm 01:32: Diese Seite hat nach diesem Maßstab 3 Einheiten (Konfigurations-Code-Fenster + Cloud-Geräte-Karten-Gruppe + Prozessbalken). Obwohl 5 Karten in der Gruppe sind, zählt sie immer noch als 1.
Bei Überschreitung nicht die Schrift verkleinern, um es unterzubringen. In der angegebenen Reihenfolge versuchen: In zwei Szenen aufteilen → Gleichartiges in einer beschrifteten Gruppe zusammenfassen → Details in das Erklärungsfeld verschieben.
Lesepfad: F-förmig und messbar
Augenbewegungsstudien zeigen, dass sich der Fokus im Inhaltsbereich auf drei Stellen konzentriert: Oberer horizontaler Streifen (Kicker und Titel), zweiter horizontaler Streifen (erste Reihe des Hauptinhalts), linker vertikaler Streifen (die gemeinsame linke Kante). Angewendet auf diesen Film:
- Startpunkt: Die erste enthüllte Informationseinheit der Szene muss ihren Schwerpunkt im oberen linken Bereich des Inhaltsbereichs haben (normalisiert x ≤ 0.50, y ≤ 0.45)
- Reihenfolge: Der vertikale Schwerpunkt der Enthüllungssequenz monoton abnehmend, maximal ein Rücksprung nach oben erlaubt
- Vertikaler Streifen: Rahmenlose Textblöcke teilen sich eine linke Kante (R14), Container linke Kante am Raster ausgerichtet (R13)
- Vorabinformation: Die ersten beiden Wörter des Titels, Slot-Titel, Punktüberschriften müssen bereits Information enthalten. Titel, die mit „Über“, „Unser“, „Besser“, „Wie“ beginnen, werden von
compose_spec.pydirekt als Fehler gemeldet.
Gemessen (innerhalb content_box, 12fps, Veränderungsschwerpunkt 1,5s nach jedem Schnitt):
| Startpunkt x | Startpunkt y | Anteil der Schnitte mit Abwärtsbewegung | |
|---|---|---|---|
| Referenzfilm | 0.393 ± 0.121 | 0.336 ± 0.126 | 67% |
| Vorherige als ästhetisch schlecht beurteilte Version | 0.660 ± 0.175 | 0.498 ± 0.152 | 48% |
Der Referenzfilm beginnt oben links und bewegt sich nach unten; die andere Version begann in der Mitte rechts und breitete sich aus – dies ist eine direkte Ursache für „wirkt verstreut“, unabhängig von der Dichte.
Bild und Voice-Over müssen dasselbe Thema behandeln
Jede Informationseinheit muss angeben, zu welchem Satz des Voice-Over sie gehört. Der Enthüllungszeitpunkt muss innerhalb von [Satzbeginn −0,4, Satzende +0,8] Sekunden liegen. Wenn kein entsprechender Satz geschrieben werden kann, bedeutet dies, dass diese Einheit im Voice-Over nicht besprochen wird und entweder gelöscht oder ein entsprechender Satz hinzugefügt werden muss.
Text im Bild ist Schlussfolgerungsphrase, Fachbegriff, Zahl, Etikett, keine wörtliche Abschrift des Voice-Over – denselben Satz gleichzeitig zu hören und zu lesen, konkurriert um Ressourcen. Untertitel sind eine separate Spur und zählen nicht zum Textbudget.
Voice-Over auch: Ein Satz, eine Sache
- Ein Satz, eine Tatsache. Zwei Tatsachen in zwei Sätzen; nicht mit „gleichzeitig“ oder „und“ verbinden. Ein Satz ≤ 32 Zähleinheiten.
- Der erste Satz jeder Szene ist die Schlussfolgerung, erst dann kommen Mechanismus und Beweise.
- Nicht aufeinanderfolgend „es“, „dieses“ verwenden; nach einem Satz den Namen wiederholen.
- Fachbegriff beim ersten Auftreten im selben Satz erklären, nicht auf den nächsten Satz verschieben.
- Eine Zahl nennen, im selben oder im unmittelbar folgenden Satz die Messbedingungen angeben.
- Verboten: Aufzählungsartiges Vorlesen von Schlüsselwörtern („schneller, stärker, stabiler“), werbesprachliche Parallelismen, drei Fachbegriffe in einem Satz, bereits im Bild klar Geschriebenes noch einmal vorlesen.
Voice-Over satzweise in CLAIMS.md eintragen und zuordnen. Sätze, die nicht zugeordnet werden können, entweder löschen oder als Schlussfolgerung mit Quelle ergänzen.
2-Sekunden-Standbild-Test
Das Standbild der Szene nehmen, Voice-Over und Untertitel ausblenden, eine Person, die das Produkt nicht kennt, bitten, die Schlussfolgerung dieser Seite und diese eine Zahl zu nennen. Wenn sie es nicht kann, ist die Seite nicht klar. Ergebnis pro Szene: passed / failed / not_tested. Wenn nicht durchgeführt, ist es not_tested.
Wie die Zeit verteilt wird: Zuerst das Standbild-Budget festlegen, dann die Animationen planen
Die Zeit eines Films mit mehreren Szenen wird nicht gleichmäßig verteilt. Vier Abschnitte, die Anteile sind feste Vorgaben:
| Abschnitt | Anteil | Energie | Inhalt | Harte Vorgabe |
|---|---|---|---|---|
| Eröffnung | 8–12% | Niedrig | Markenauftritt + Ein-Satz-Zusammenfassung des gesamten Films | Wortmarke nach dem Festlegen ≥1s halten; Frame 0 ist vollständiges Deckblatt |
| Vorstellung | 10–16% | Niedrig bis Mittel, langsamster Teil des Films | Erstes Kapitel, höchste Qualität | — |
| Anstieg | 52–64% | Mittel bis Hoch und Niedrig wechselnd | Ein Bild, eine Fähigkeit | Alle 1–2 Inhaltsbilder eine Kapitelseite zur Energieabsenkung einfügen |
| Schluss | 10–16% | Höchste Energie des gesamten Films | Rückblick + Schlüsselzahlen + Einstieg | Nicht ausblenden, nach dem Lesen bis zum letzten Frame halten |
Reihenfolge: ① Fähigkeitenliste erstellen und Anzahl der Einstellungen zählen → ② Zuerst die nicht verletzbare Standzeit abziehen (Wortmarke halten, Lese-Pause, Kapitelseite vollständig 1,1s halten, Schluss 2s halten) → ③ Die verbleibende Zeit erst den Animationen zuweisen → ④ Übergang pro Naht auswählen, Übergangsdauer vom Budget der beiden benachbarten Einstellungen abziehen, nicht zusätzliche Zeit hinzufügen.
Nicht zwei aufeinanderfolgende Einstellungen mit hoher Energie. Die Kapitelseite dient als „Atemkarte“ zur Energieabsenkung – sie hat niedrige Dichte, viel Weißraum, 2–6 Zeichen. Mache sie nicht zu einer weiteren Informationseinstellung, das wäre, als hätte man sie nicht eingefügt.
Template-Dekorations-Blacklist
Diese sind nicht „hässlich“, sondern „erkennbar als aus einem Template“. Wenn sie auftauchen, sofort löschen:
Überschrift mit einer weiteren Zeile Großbuchstaben-Englisch-Etikett oben · „A · B · C“-Punkt-verbundene Wortkette · Pfeil-Dekoration am Ende von Schaltflächen oder Etiketten · Nur einem Wort in der Überschrift eine andere Farbe geben · Inhalt, der keine Sequenz ist, aber mit 01/02/03 nummeriert wird · Emoji-Symbole ohne Bezug zum Mechanismus · Linke Farbstreifen an abgerundeten Karten · Leuchtpartikel, Datenströme, Hologramm-HUD, Neon · Dunkler Hintergrund mit Neon-Leuchteffekt, um Technologie vorzutäuschen.
Das Kriterium ist „Wächst es aus dem Inhalt heraus?“, nicht „Sieht es aus wie ein Template?“ Nummerierung ist legitim, wenn es wirklich eine Sequenz ist (Kapitel, Ableitungsschritte); Farbverlauf ist legitim, wenn er von der Markenfarbe abgeleitet ist.
Nähte: Kein nackter Schnitt im gesamten Film
Benutzerfeedback (2026-11-05): „Der Übergang zwischen den Kapiteln muss sehr natürlich sein, nicht direkt eingeblendet, was sehr hölzern wirkt.“ Allgemein anerkannte gute Release-Filme haben keinen einzigen nackten Schnitt. Wenn man einen „Schnitt“-Effekt möchte, verwende einen gestalteten Schnitt.
Jede Szenennaht muss einen Übergang deklarieren, die Dauer wird je zur Hälfte vom Budget der beiden benachbarten Einstellungen abgezogen – der Übergang wird nicht zur Filmlänge hinzugefügt, sondern von beiden Einstellungen geliehen. Das Fenster ist [Naht − Dauer/2, Naht + Dauer/2], in dieser Zeit sind beide Szenen gleichzeitig auf dem Bildschirm.
| Angrenzende Einstellungen | Verwenden | Dauer | Wie |
|---|---|---|---|
| Deckblatt → Kapitelseite | Cross-Fade | 0.62s | Deckblatt ausgeblendet und allmählich unscharf, Kapitelnummer gleichzeitig unscharf aufgelöst |
| Text → Kapitelseite | Cross-Fade | 0.58s | Während des Ausblendens der vorherigen Seite wird die Nummer unscharf eingeblendet, beides im selben Fenster |
| Kapitelseite → Text | Prisma-Lichtwischer | 0.92s | Nummer vergrößert und unscharf → Regenbogen-Lichtband diagonal → Nächste Seite bereits hinter dem Lichtband ausgebildet, Schlüsselinhalte noch nicht gezeigt |
| Text → Schluss | Cross-Fade | 0.62s | Gleich wie oben |
| Text → Text (gleiches Kapitel, neues Bild) | Unschärfe-Staffel | 0.50s | Nur Unschärfe ändern, keine horizontale Verschiebung |
Prisma-Lichtwischer: Ganzer Bildschirm mit einer dünnen Schicht aus surface_tint (Peak 0.62), ein 1420 breites Lichtband im 17°-Winkel. Stoppfarben: Primär 0.34 → Sekundär-Akzent 0.30 → Akzent 0.26. Weißblitz, Ganzbild-Wipe, Seitenwischer, Rotation verboten.
Naht an die Lücke des Voice-Over heften (move on pause): Nur vorziehen, nicht nach hinten verschieben, Obergrenze 0,8s. Die Kosten für den Zuschauer, den Blick in einer Hörlücke zu bewegen, sind am geringsten.
Beurteilung (R27): Das Nahtfenster mit 12fps bebildern, die gesamte Bild- Frame-für-Frame-Änderung berechnen; Einzel-Frame-Änderung / Gesamtänderung des Fensters ≤ 0.55. Ein nackter Schnitt drückt mehr als 90% der Änderung in ein einzelnes Frame. Die sieben Nähte dieser Version lagen bei 0.155–0.35.
Das Deckblatt muss Frame 0 sein. Der Player verwendet t=0 als Poster; wenn Frame 0 leer ist, gibt es kein Deckblatt. Daher erzeugt das Deckblatt keine Bewegung durch das Eintreten von Elementen – alle Elemente sind von Anfang an da, die Bewegung besteht aus drei Dingen, die die Bounding-Box nicht ändern: ein stiller konzentrischer Ring, zwei Lichtwischer und das Aufleuchten des entsprechenden Etiketts, wenn das Voice-Over in diese Richtung spricht. Beurteilung: Kantenbedeckung des Inhaltsbereichs in Frame 0 ≥ 0.90 der des Standbildes des Deckblatts. Auch Dekoration muss in Frame 0 an ihrem Platz sein – gemessen: Ring als 0→1 einblenden, dieses Verhältnis beträgt nur 0.673.
Fokus: Wer besprochen wird, leuchtet; aber bereits Besprochenes muss noch lesbar sein
Benutzerfeedback (zweite Runde): „Wenn ein Inhalt besprochen wird, sind die anderen Inhalte grau, der gerade besprochene wird hervorgehoben.“ Benutzerfeedback (dritte Runde): „Nach dem Besprechen sofort grau gemacht, man hat es gar nicht zu Ende gesehen.“ „Nicht zu unscharf machen, sondern abdunkeln, aber den Inhalt noch erkennbar lassen.“ „Wenn der besprochene Inhalt mit dem nächsten zusammenhängt, vorerst nicht abdunkeln.“
Vier Zustände, nur die Tintenmenge reduzieren, nicht die Schärfe
| Zustand | Tintenmenge | Unschärfe | Karte | Wann |
|---|---|---|---|---|
| active | 1.0 | 0 | Mit Schatten, Primärfarbe-Rahmen | Das Voice-Over spricht gerade darüber. Es wird durch „Herausheben“ erkannt, nicht durch Undeutlichmachen anderer |
| read | 0.70 | 0 | Kein Schatten, normaler Rahmen | Bereits besprochen. Tinte visuell auf etwa #5A6070 reduziert, Kontrast immer noch 6:1, aus drei Metern lesbar |
| waiting | 0.88 | 0 | Normal | Noch nicht an der Reihe. Nur leicht reduziert, die Seite muss voll wirken |
| settled | 1.0 | 0 | Normal | Voice-Over zu Ende, ganze Seite wieder undurchsichtig |
Keine Unschärfe. Diese Regel widerspricht der huashu-design-Regel „Unschärfe-Dreier-Set muss Blur enthalten“. Hier, für Informationsfilme, ist es gelöst: Unschärfe bewirkt, dass das Element aufhört, um Aufmerksamkeit zu konkurrieren; aber der Zuschauer eines Informationsfilms muss es noch einmal lesen. Unschärfe bleibt nur zwei Stellen vorbehalten: Übergänge zwischen Szenen und Ein-/Ausgänge der Kapitelseitennummern.
Wann beginnt das Abdunkeln?
Satzbeginn Satzende +1.0s +0.8s
|--------------|------------|------------|
active ============================>
Abdunkeln [===Fade===] read
- Eine Einheit darf nicht vor dem Ende ihres eigenen Satzes zu dunkeln beginnen (deklarierte Hälfte von R30).
- Nach dem Besprechen weitere 1.0s für den Zuschauer zum Lesen lassen, dann in 0.8s langsam abdunkeln.
- Alte Methode: „Sobald der nächste Satz beginnt, den Fokus wechseln.“ Der Zuschauer liest noch am vorherigen Block, das Bild hat ihn bereits genommen.
Zusammenhängende Blöcke gemeinsam hell und dunkel
Konfiguration und ihr Gültigkeitsbereich, Zahlen und ihre Messbedingungen – diese paarigen Inhalte deklarieren dieselbe focus_group: Solange irgendein Element in der Gruppe besprochen wird, bleibt die gesamte Gruppe active; 1.0s nachdem das letzte Element der Gruppe zu Ende besprochen wurde, dunkelt die gesamte Gruppe gemeinsam ab.
Beurteilung (R28)
Ein Frame zum Zeitpunkt des Unschärfens eines Elements nehmen und denselben Frame des Standbildes vergleichen. Die durchschnittliche Gradientenstärke innerhalb der Bounding-Box desselben Elements vergleichen. Unschärfe-Zustand ≤ 0.85 des Standbild-Zustands.
Durchschnittlichen Gradienten verwenden, nicht die Anzahl der Kanten nach Schwellwert: Wenn nur der Kontrast reduziert wird, keine Unschärfe hinzugefügt, überschreitet der Schwellwert entweder alle oder keinen; die Metrik würde von der Verarbeitung entkoppelt. Der durchschnittliche Gradient variiert linear mit dem Kontrast, bei Tintenmenge 0.70 misst man etwa 0.70.
Enthüllung: Stützinhalte sind von Anfang an da, nur Schlüsselbegriffe warten auf das Voice-Over
Benutzerfeedback (dritte Runde): „Der mittlere Rahmen hat keinen Inhalt, der untere Rahmen hat keinen Inhalt, aber hat noch Stil. Auf den ersten Blick sieht es seltsam aus.“ „Man kann eigentlich den unwichtigen Inhalt zuerst anzeigen. Den wichtigen während des Voice-Over mit Schreibmaschineneffekt zeigen.“ „Normalerweise nur den Inhalt mit Schreibmaschineneffekt anzeigen. Wenn er bereits angezeigt wurde und später noch einmal erwähnt wird, den Hintergrund hervorheben.“
Diese Regel schränkt die zweite Runde-Regel „Schlüsselinhalte für den Moment des Voice-Over aufheben“ ein, sie hebt sie nicht auf. Nur ein Schlüsselbegriff pro Einheit wird zurückgehalten, nicht die gesamte Karte.
Was zu Beginn gezeichnet werden muss
Karten, Chips, Titel, Trennlinien, Zeilentitel, sekundäre Zeilen, Struktur. Eine Einheit behält nur einen Schlüsselbegriff für das Voice-Over zurück – den Zahlenwert, den Code, den Satz von Tags.
Eine Zeile nur ein Animationstyp
| Zeitpunkt | Verwenden | Nicht überlagern |
|---|---|---|
| Erstes Erscheinen | Schreibmaschine, von links nach rechts zeichenweise, 0.4–1.0s | Kein Lichtwischer, kein Hintergrundstreifen, kein linker Farbbalken |
| Spätere erneute Erwähnung | Hintergrund-Highlight-Streifen #FFF4D6 + 3px linker Farbbalken, 0.42s | — |
Hervorhebung ist die Sprache für „erneute Erwähnung“. Wenn man beim ersten Erscheinen hervorhebt, ist diese Sprache verloren; der Zuschauer kann nicht mehr unterscheiden, was neu ist.
Die vorherige Version hat jeder Zeile einen Lichtwischer zugewiesen, um den Anteil der Frames mit Änderung ≥ 0.45 zu erreichen – der Benutzer sagte wörtlich: „Zu viele Animationen für den Text darin.“ Jetzt bestraft man direkt das Anhäufen von dekorativen Animationen, um die Bewegungsmenge zu erreichen.
Wann kann ein Skeleton-Bildschirm verwendet werden?
Wenn der Inhalt tatsächlich später besprochen wird und das Skeleton selbst gestaltet ist, kann es verwendet werden, aber es muss erfüllen: Titel und Struktur haben (kein reines leeres abgerundetes Rechteck), Platzhalterbalken unterschiedlicher Länge (sieht aus wie die Umrisse eines echten Inhalts), Skeleton nicht mehr als 60% der Kartenhöhe, die Skeletons jeder Karte dürfen nicht identisch aussehen.
Voice-Over und Bild müssen dasselbe Thema behandeln, das ist das absolute Minimum
Benutzerfeedback (dritte Runde): „Unbedingt, unbedingt müssen Voice-Over, Bild und Animation übereinstimmen!!! Das ist das absolute Minimum!“
Der Fehler der zweiten Version war, dass die Deklaration selbst falsch war: R22 prüft nur, ob der Enthüllungszeitpunkt im Zeitfenster des deklarierten Satzes liegt, prüft nie, ob dieser Satz diese Einheit behandelt. Also hing die Karte mit dem 2,8-fachen Wert an „Eine andere Dauer sank von 12,6s auf 4,0s“ – dieser Satz handelte von der zweiten Zeile einer anderen Karte – das Zeitfenster stimmte natürlich überein, alle Prüfungen waren grün.
R29: Eins-zu-eins-Zuordnung und Text muss übereinstimmen
- Jede Informationseinheit deklariert genau einen Satz des Voice-Over.
- Zwei Einheiten dürfen sich keinen Satz teilen, es sei denn, sie gehören zur selben Stagger-Gruppe und kommen im selben Takt.
- Jeder Satz des Voice-Over in einer Szene muss von einer Einheit deklariert werden, keine verwaisten Sätze.
- Der Text dieses Satzes muss ein Schlüsselwort dieser Einheit enthalten: Kartentitel, Zeilenbezeichner, Zahl, Bezeichnungstext, Dateiname (eines davon).
Daher muss jede Informationseinheit in
content.yamleinkeywords-Feld haben.
R30: Das Bild folgt dem Voice-Over
- Deklarationsebene:
dim_t >= Endzeit des Satzes dieser Einheit + 1.0s. - Testebene: Während der Wiedergabe jedes Satzes des Voice-Over muss im Rahmen der entsprechenden Einheit eine sichtbare Änderung auftreten
…
[Abgeschnitten für die Übersetzung]