Bildschirminhalt (Storyboard)
Dies ist eine einzelne Aufgabe, kein Schritt in einem Workflow. Sie wird immer dann ausgeführt, wenn der Benutzer sie anfordert – auch nachträglich nach einem Schnitt.
Es gibt nur zwei Voraussetzungen: Projekt und Untertitel müssen bereits existieren (Overlays werden an Cues gebunden, die Zeit wird aus dem Projekt berechnet).
Erforderlich: edit-list.json, transcript.json, subtitles.json
Ausgabe: visuals.json + modules/<Nummer-Name>/index.html
Nach Abschluss wird angehalten und der Benutzer nicht zum nächsten Schritt aufgefordert.
Zunächst wird der phasenbezogene Vertrag des Geschäfts-Skills gelesen und ausgeführt. Die strikten Regeln für Modul-Schreibweisen sind im Modulvertrag festgelegt, die Entscheidungsregeln in Bildentscheidung.
0. Bereitschaft
Zunächst wird der Bereitschaftscheck ausgeführt – ob die Skills auf dem neuesten Stand sind
und die Runtime kompatibel ist; der Plugin-Pfad wird dort ebenfalls lokalisiert (alle Befehle in diesem Dokument, die <Plugin-Pfad> enthalten, ersetzen es durch diesen tatsächlichen Pfad). Nur bei „Bereit“ wird fortgefahren; bei „Neue Sitzung erforderlich“ oder „Anhalten“ wird entsprechend der dortigen Anweisung verfahren
(einschließlich des Verbots „Keine selbstgebauten Alternativoberflächen“). Das Geschäfts-Skill enthält keine eigene Umgebungslogik.
Falls das Bereitschaftsergebnis runtime.kind=desktop-managed ist, wird die bereits installierte stabile CLI der Desktop-App und derselbe launchd/Windows-Task-Dienst direkt wiederverwendet; es wird kein Electron-Pfad analysiert, keine weiteren Abhängigkeiten installiert und keine zweite Runtime gestartet.
Befehle
node "<Plugin-Pfad>/scripts/ensure-running.cjs" --json
node "<Plugin-Pfad>/scripts/videocut-cli.cjs" visual get <Projekt> --json
node "<Plugin-Pfad>/scripts/videocut-cli.cjs" visual frame <Projekt> --cues sub-0004,sub-0005 --count 12 --out <Verzeichnis> --json
node "<Plugin-Pfad>/scripts/videocut-cli.cjs" visual add <Projekt> --module modules/01-xx/index.html --cues sub-0004,sub-0005 [--zoom x,y,w,h] [--id vis-0001] --json
node "<Plugin-Pfad>/scripts/videocut-cli.cjs" visual remove <Projekt> --id vis-0001 --json
ensure-running muss zunächst nachweisen, dass Port 5190 zum verwalteten Dienst der aktuellen Plattform gehört; bei Fehlschlag wird der Fehler weitergereicht und abgebrochen, ohne auf einen Vordergrund-Port oder einen selbst gewählten Port zurückzufallen.
Overlays werden an Untertitel-Cues (--cues) gebunden; das Produkt rechnet selbst in Wort-IDs um – Overlays können niemals an Wörter gebunden werden, die niemand spricht, und verschieben sich bei Schnittänderungen automatisch mit. Es werden keine Sekundenangaben gespeichert.
Vier Schritte, ohne einen auszulassen
① Text – Aufgabe definieren subtitles.json lesen, semantisch segmentieren, je Segment beantworten:
Tutorial/Demo/Beleg oder Konzept/Logik/Übergang?
② Frames extrahieren & Bild prüfen visual frame: 8–12 Frames extrahieren, wirklich mit den Augen ansehen.
Tatsächlich wurden bei 12 Segmenten 2 Segmente durch das Bild widerlegt – dieser Schritt ist keine Formsache
③ Bewegungsfenster messen Pixel-Differenz aufeinanderfolgender Frames berechnen, Momente von Scrollen/Wechsel/Bedienung identifizieren.
Overlays nur auf stabilen Bildschirmen platzieren, Ausblenden vor Beginn der Bewegung
④ Overlay erstellen & platzieren Modul schreiben → visual add → in der Vorschau Layer für Layer prüfen
Entscheidungsregeln für Schritt ②
Bild zeigt genau das, was gesagt wird → Markierung: einkreisen, genau beim genannten Wort. Echte Beweise nicht überdecken
Bild kaum relevant/leer → Schwarz-Weiß-Animation: vollflächig weiß, aus dem Stil-Repository
Bild selbst ist klar genug → Keine Änderung. Dies ist die häufigste richtige Antwort (tatsächlich 4 von 13 Segmenten unverändert)
Ergebnis von Schritt ③ sind Zahlen, kein Gefühl
Koordinaten der Markierung Pixelstatistiken (Graustufenscan nach Textzeilen), niemals nach Augenmaß – Augenmaß hatte 50px Abweichung
Interaktionsmoment Pixel-Differenz Frame für Frame auf Sprünge prüfen (tatsächlich ein Sprung von 4 auf 335), Ausblenden 0,2 s vor dem Sprung
Stabiles Fenster Zu Beginn oft Scrollen (der Nutzer sucht), Overlay ab dem stabilen Frame anbinden
Zoom vorher genau überlegen
Standardmäßig kein Zoom. 960x720 Bildschirmaufnahmen werden beim Vergrößern unscharf, das fällt sofort auf
Nur wenn unvermeidbar ≤1,6-fach, Bereich quadratisch zentriert mit 62,5 % Seitenlänge – Bildkomposition wichtiger als winzige Schrift lesen
Schrift zu klein Markierung reicht zur Führung; wenn lesen nötig, ist die Lösung eine hochauflösende Neuaufnahme, kein Zoom
Review-Zyklus
Modulverzeichnisse werden nummeriert (01-daily-report, 05-anim-task-split),
auf der Timeline wird der Verzeichnisname angezeigt, der Benutzer nennt die Nummer, du änderst nur diesen Layer, andere bleiben unberührt.
Zwei Disziplinregeln für Layer-Änderungen, jede basierend auf einem tatsächlichen Vorfall:
Bei Layer-Änderung immer das Modul prüfen Nach Verkürzung/Verlängerung eines Layers bleiben die im Modul fest codierten relativen Zeitpunkte unverändert –
der Ausblendzeitpunkt einer Markierung kann nach Layer-Ende fallen und erscheint nie.
Abnahme mit Pixel-Bildschirmfoto Mit Bildschirmfoto prüfen, nicht mit DOM-Eigenschaften. Ein iframe mit korrekter Sichtbarkeitsumschaltung
war physisch nicht im Bild – alle Eigenschaften korrekt, der Bildschirm völlig leer.
Was nicht erlaubt ist
- Nicht erlaubt: Überspringen von Frame-Extraktion und Bewegungsanalyse (beide Fehler traten auf: echte Beweise überdeckt, Markierung schwebte über Scrollen)
- Nicht erlaubt: Jedes Segment mit etwas zu versehen – Vollständigkeit ist kein Ziel, keine Änderung ist ein häufiges, legitimes Ergebnis
- Nicht erlaubt: Speichern von Sekundenangaben, Koordinaten nach Augenmaß, Abdunkeln auf weißem Hintergrund
- Ohne echten Inhalt keine Platzhaltergrafiken verwenden
- Stil aus dem Repository wählen, nicht selbst erfinden
- Markenlogos mit offiziellen Schriftglyphen, keine handgezeichneten Stellvertreter (X wurde mit zwei sich kreuzenden Linien gezeichnet und vom Benutzer erkannt). Falls nicht im lokalen Index vorhanden, einfarbige offizielle Glyphen (Schwarz-Weiß harmoniert) aus simple-icons holen, die Original-SVG in das Modulverzeichnis zur Referenz speichern; im selben Video darf eine Marke nur einheitlich aussehen.