Communitygithub.com

viva-video

Erstelle deterministische, code-rendered Produkt-Launch- oder Konzept-Erklärvideos aus einem Quelldokument – jedes Bild wird von Code gezeichnet (kein Videogenerierungsmodell), mit exakten Daten und echtem Code auf dem Bildschirm, chinesischem Voice-Over und brandkonformer Typografie.

Was ist viva-video?

Viva-Video ist ein Skill für KI-Agenten (z. B. Claude Code, Codex, Cursor), der aus einem Produktdokument vollständig code-generierte Erklärfilme erstellt. Anders als filmische Produkte verwendet es keine KI-Videogenerierung, sondern rendert jedes Frame deterministisch mit exakten Daten, echtem Code und einem präzisen Voice-Over. Der Skill erzwingt ein tiefes Verständnis des Quelldokuments: Vor der Erstellung werden die Dokumentenstruktur, Behauptungen und Konzepte in strukturierte Dateien (UNDERSTANDING.md, CLAIMS.md, CONCEPT_MAP.md) überführt. Das Ergebnis ist ein informationsdichtes Video mit chinesischer Narration, bei dem die Aussprache von Produktnamen vorab gemessen und korrigiert wird. Der Skill unterstützt austauschbare Sprach- und Videomodelle, ohne selbst API-Keys oder Adressen mitzuliefern. Er eignet sich für Produkt-Launch-Videos, Release-Filme und Erklärungen komplexer Mechanismen, aber nicht für kinoreife Brand-Filme oder reine Schnittarbeiten.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/keepview/viva-video/tree/HEAD

In Ihrer bevorzugten KI fragen

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

Dokumentation

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 comprehension in film-rules.yaml ist blockierend; compose_spec.py wird prüfen.

Drei Dokumente müssen erstellt werden

DateiInhaltZweck
UNDERSTANDING.mdWas 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 markierenVerhindert, dass der Film falsche oder übertriebene Aussagen macht
CLAIMS.mdJede Schlussfolgerung in einer Zeile: Behauptung / Quellenangabe / Mechanismus / Nutzen / Einschränkungen / visueller Beleg / riskante FormulierungenJeder Satz im Film muss auf diese Tabelle zurückgeführt werden können
CONCEPT_MAP.mdDokumentenabschnitte → 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.

  1. Welches Problem löst dieses Ding, wie haben es die Benutzer bisher gemacht, wo liegen die Schmerzen?
  2. Den Mechanismus als eine Ursache-Wirkungs-Kette darstellen, keine Sprünge.
  3. Welche Zahl beweist die Schlussfolgerung am besten, unter welchen Bedingungen wurde sie gemessen, gilt sie noch unter anderen Bedingungen?
  4. Womit könnte der Zuschauer es am ehesten verwechseln, wie kann das Bild dies verhindern?
  5. 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.md festgehalten.

Dreischichtige Struktur, nur die mittlere Schicht ändert sich jedes Mal

SchichtDateiBei jedem Filmdreh
Regelschichtreferences/film-rules.yamlNicht ä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
Themenpaketthemes/<name>/theme.yamlNur 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
ProduktinhaltDeine content.yamlNur dies schreiben. Verständnis, Fakten, Kapitel, Behauptungen, Metriken, Markenressourcen, Aussprachetabelle, Erzählweise pro Kapitel und Informationseinheiten
Syntheseproduktvideo-spec.resolved.yamlNicht 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 verwenden tts.mjs, pron_calibrate.mjs, asr_check.mjs --backend command alle 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.

AnzeigeAn TTS gesendetAusgesprochen
RspackRS packR-S-pack
RsbuildRS buildR-S-build
RstestRS testR-S-test
RsdoctorRS doctorR-S-doctor

Gemessen am 2026-11-04 (eine chinesische Frauenstimme, Geschwindigkeit 1.24, nach Synthese mit lokalem faster-whisper rücktranskribiert):

SchreibweiseRücktranskriptionBeurteilung
RspackSpacNein, s verloren
RS packRSPACÜbernommen, Gesamtlänge aller vier Namen 7.78s
R S packRS PackBrauchbar, etwas länger
R 斯 packOSPACNein, das chinesische Zeichen „斯“ zieht das vorherige R in die Irre
R-S-packRS PackNein, 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])

MetrikUntergrenzeMessung
Containerbelegung≥ 0.55Bounding-Box der Szenenobjekte
Vertikale Spannweite≥ 0.72Bounding-Box der Szenenobjekte
Horizontale Spannweite≥ 0.86Bounding-Box der Szenenobjekte
Maximales leeres Rechteck≤ 0.14Bounding-Box der Szenenobjekte
Maximaler leerer Streifen≤ 150 DesignpxBounding-Box der Szenenobjekte
Unabhängige Informationseinheiten≥ 3Szenenobjektliste
Maximales leeres Rechteck im Standbild≤ 0.20Kantenbild 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

RegelWarum
ZeilenhöheDisplay 1.15, Titel 1.35, Text 1.65Chinesische 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
BuchstabenabstandDisplay (>60px) −0.02em, Titel 0, Text 0Chinesische 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ängeEine Zeile 22–38 Zeichen, optimal 28–32Chinesische Zeichen haben hohe Dichte, dieselbe Breite enthält mehr Informationen als Westlich. Zu lange Zeilen führen zum Verlust der Zeile beim Zurücklesen
SchriftstapelWestlich vorne, Chinesisch hintenZeichenweises 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
HervorhebungSchriftstärke ändern oder HintergrundfarbeChinesisch hat keine Kursivschrift, synthetische Kursivschrift durch Browser/Renderer verzerrt chinesische Zeichen. Synthetische Fettschrift ebenfalls verboten
AnführungszeichenEckige Anführungszeichen « »Gebogene Anführungszeichen sind in chinesischen Schriftarten im Vollbreiten-Format und westlicher Form, visuell schwebend
ZahlenWestliche Schriftart + tabular-numsSonst 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.py beurteilt werden, es sind keine ästhetischen Empfehlungen.

Informationsbudget: Nicht nur Untergrenze, auch Obergrenze

WertErklärung
Informationseinheiten-Untergrenze3Darunter ist die Seite leer
Informationseinheiten-Obergrenze5Darüber fällt der 2-Sekunden-Standbild-Test durch
Textmenge im Inhaltsbereich≤ 120 ZähleinheitenChinesische Zeichen einzählen, englische Wörter einzählen
Neu eingehende Informationen pro Beat1 StelleEine 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.py direkt als Fehler gemeldet.

Gemessen (innerhalb content_box, 12fps, Veränderungsschwerpunkt 1,5s nach jedem Schnitt):

Startpunkt xStartpunkt yAnteil der Schnitte mit Abwärtsbewegung
Referenzfilm0.393 ± 0.1210.336 ± 0.12667%
Vorherige als ästhetisch schlecht beurteilte Version0.660 ± 0.1750.498 ± 0.15248%

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:

AbschnittAnteilEnergieInhaltHarte Vorgabe
Eröffnung8–12%NiedrigMarkenauftritt + Ein-Satz-Zusammenfassung des gesamten FilmsWortmarke nach dem Festlegen ≥1s halten; Frame 0 ist vollständiges Deckblatt
Vorstellung10–16%Niedrig bis Mittel, langsamster Teil des FilmsErstes Kapitel, höchste Qualität—
Anstieg52–64%Mittel bis Hoch und Niedrig wechselndEin Bild, eine FähigkeitAlle 1–2 Inhaltsbilder eine Kapitelseite zur Energieabsenkung einfügen
Schluss10–16%Höchste Energie des gesamten FilmsRückblick + Schlüsselzahlen + EinstiegNicht 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 EinstellungenVerwendenDauerWie
Deckblatt → KapitelseiteCross-Fade0.62sDeckblatt ausgeblendet und allmählich unscharf, Kapitelnummer gleichzeitig unscharf aufgelöst
Text → KapitelseiteCross-Fade0.58sWährend des Ausblendens der vorherigen Seite wird die Nummer unscharf eingeblendet, beides im selben Fenster
Kapitelseite → TextPrisma-Lichtwischer0.92sNummer vergrößert und unscharf → Regenbogen-Lichtband diagonal → Nächste Seite bereits hinter dem Lichtband ausgebildet, Schlüsselinhalte noch nicht gezeigt
Text → SchlussCross-Fade0.62sGleich wie oben
Text → Text (gleiches Kapitel, neues Bild)Unschärfe-Staffel0.50sNur 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

ZustandTintenmengeUnschärfeKarteWann
active1.00Mit Schatten, Primärfarbe-RahmenDas Voice-Over spricht gerade darüber. Es wird durch „Herausheben“ erkannt, nicht durch Undeutlichmachen anderer
read0.700Kein Schatten, normaler RahmenBereits besprochen. Tinte visuell auf etwa #5A6070 reduziert, Kontrast immer noch 6:1, aus drei Metern lesbar
waiting0.880NormalNoch nicht an der Reihe. Nur leicht reduziert, die Seite muss voll wirken
settled1.00NormalVoice-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

ZeitpunktVerwendenNicht überlagern
Erstes ErscheinenSchreibmaschine, von links nach rechts zeichenweise, 0.4–1.0sKein Lichtwischer, kein Hintergrundstreifen, kein linker Farbbalken
Spätere erneute ErwähnungHintergrund-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.yaml ein keywords-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]

Verwandte Skills