Communitygithub.com

product-demo-video

Erstellt kurze Produkt-Demovideos (MP4 + GIF), indem der Browser mit Playwright gesteuert und die Szene mit Remotion komponiert wird – automatischer Zoom auf angeklickte Elemente, animierter Cursor, Untertitel, Übergänge und Entfernung von Leerlauf. Immer verwenden, wenn der Nutzer nach einer Funktionsdemo, einem Produktvideo, Screencast, Bildschirmaufnahme, Walkthrough, Video-Tutorial oder Feature-GIF für README/Landing/Changelog/Docs fragt.

Was ist product-demo-video?

Dieses Skill ermöglicht es, professionelle Produkt-Demovideos zu erstellen, die wie SaaS-Launchvideos aussehen, nicht wie einfache Screencasts. Der Kernansatz besteht darin, den Bildschirm nicht aufzuzeichnen, sondern hochauflösende Screenshots zusammen mit den tatsächlichen Koordinaten der Elemente mit Playwright zu erfassen und das Material dann mit Remotion zu animieren. Dies bietet volle Kontrolle über Kamerabewegungen, Rhythmus und Untertitel und erlaubt eine erneute Berechnung in wenigen Sekunden, wenn der Nutzer Änderungen wie „schneller“, „größerer Zoom“ oder „Schritt entfernen“ wünscht. Das Skill unterstützt die Erstellung von MP4- und GIF-Dateien, automatischen Zoom auf angeklickte Elemente, animierte Cursor, Untertitel, Übergänge und das Entfernen von Leerlauf. Es ist für Claude Code, Cursor und Codex optimiert und wird über ein JSON-Skript gesteuert, das sowohl Playwright als auch Remotion dirigiert. Der Workflow umfasst Setup, Drehbucherstellung, Aufnahme und Rendering, wobei einzelne Schritte unabhängig wiederholt werden können, um schnell zu iterieren.

Funktioniert mit✓Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/pedroantunes-84/skill-product-demo-video/tree/main/skills/product-demo-video

In Ihrer bevorzugten KI fragen

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

Vorschau

Aus dem Skill-README

product-demo-video preview

Dokumentation

Product Demo Video

Produktdemos, die wie SaaS-Launchvideos aussehen, nicht wie Screencasts.

Die Kernidee: Nicht den Bildschirm aufnehmen. Erfassen Sie hochauflösende Screenshots + die tatsächlichen Koordinaten der Elemente mit Playwright und animieren Sie dieses Material anschließend in Remotion. Das gibt Ihnen volle Kontrolle über Kamera, Rhythmus und Untertitel – und ermöglicht ein erneutes Rendern in 10s, wenn der Nutzer sagt: "schneller", "größerer Zoom", "diesen Schritt entfernen", "mach eine 10s-Version". Neu aufnehmen wäre langsam und würde ein schlechteres Ergebnis liefern.

Ablauf

  1. Setup (einmal pro Projekt) → node <skill>/scripts/setup.mjs
  2. Drehbuch → schreiben Sie demo.json (siehe references/roteiro.md)
  3. Aufnahme → node .demo-video/tools/capture.mjs demo.json capture/ (Playwright)
  4. Rendering → node .demo-video/tools/render.mjs --capture capture/ --out out/ (Remotion)
  5. Auslieferung → out/<name>.mp4 (1080p) + out/<name>.gif (in HTML einbettbar)
  6. Iterieren → bearbeiten Sie demo.json und führen Sie nur den geänderten Schritt aus

Zeit/Kamera/Untertitel geändert? Nur neu rendern (Schritt 3, ~30s). Der Ablauf in der App geändert? Auch neu aufnehmen (Schritt 2).

Von der Anfrage auf Portugiesisch zum Drehbuch

Der Nutzer beschreibt den Ablauf in natürlicher Sprache ("zeig, wie man einen Agenten erstellt"); Sie übersetzen das in Selektoren, indem Sie sich die App ansehen – niemals raten. Raten #submit kostet eine gesamte Aufnahme, die in Szene 4 fehlschlägt.

  1. Öffnen Sie den Bildschirm mit den Browser-Entwicklertools und lesen Sie das DOM.
  2. Sammeln Sie die Selektoren in der Reihenfolge der Robustheit: [data-testid=...] > #id > sichtbarer Text (text=Neuer Agent) > CSS-Pfad. CSS-Pfad bricht bei der ersten Layout-Änderung; Text bricht, wenn die Oberfläche übersetzt wird.
  3. Bestätigen Sie den Ablauf mit dem Nutzer, bevor Sie aufnehmen – zeigen Sie das Drehbuch und fragen Sie, ob die Reihenfolge der Schritte so stimmt. Er kennt das Produkt; Sie nicht.
  4. Wenn die App eine Anmeldung erfordert, bitten Sie ihn, zuerst auth.mjs auszuführen.

Wenn es keine Möglichkeit gibt, die App zu öffnen (internes Produkt, kein Zugang), bitten Sie um Selektoren oder einen Screenshot mit HTML – das ist schneller als Raten.

Das Drehbuch ist die Quelle der Wahrheit

Ein einziges JSON steuert Playwright und Remotion. Bevor Sie etwas aufnehmen, schreiben Sie das Drehbuch und zeigen es dem Nutzer – es ist billig, dort zu korrigieren, und teuer, danach zu korrigieren. Vollständiges Schema in references/roteiro.md.

{
  "name": "agent-erstellen",
  "url": "https://app.beispiel.com",
  "viewport": { "width": 1600, "height": 900 },
  "scenes": [
    { "action": "goto",  "value": "/dashboard", "camera": "wide", "caption": "Ihr Dashboard", "duration": 2 },
    { "action": "click", "target": "[data-testid='new-agent']", "camera": "zoom", "caption": "Erstellen Sie Ihren Agenten", "duration": 2 },
    { "action": "type",  "target": "#agent-name", "value": "Finanzanalyst", "camera": "focus", "duration": 2.5 },
    { "action": "click", "target": "button[type=submit]", "camera": "zoom", "duration": 1.5 },
    { "action": "wait",  "value": 1200, "camera": "wide", "caption": "Bereit in 3 Klicks", "duration": 2.5 }
  ]
}

Setup (erstes Mal im Projekt)

node "$HOME/.claude/skills/product-demo-video/scripts/setup.mjs"

Erstellt .demo-video/ (Remotion-Komposition + Werkzeuge in .demo-video/tools/), installiert die Abhängigkeiten und lädt Chromium herunter – ~300MB. Bestätigen Sie mit dem Nutzer, bevor Sie es ausführen; danach dauern Aufnahme und Rendering nur Sekunden. Schlagen Sie vor, .demo-video/, capture/ und .auth/ zur .gitignore hinzuzufügen.

Um das Ergebnis live zu verfeinern, öffnen Sie cd .demo-video && npx remotion studio – eine Vorschau mit Scrubber, viel besser als Rendern zur Timing-Überprüfung.

Kameraführung

Was eine gute von einer schlechten Demo unterscheidet, ist Rhythmus, nicht Effekt. Regeln, die funktionieren:

  • Öffnen und schließen Sie mit wide. Der Zuschauer muss sich vor dem Zoom orientieren und das Ergebnis danach sehen. Dauerhafter Zoom durch den ganzen Film ermüdet und desorientiert.
  • Ein Zoom pro Absicht, nicht pro Klick. Aufeinanderfolgende Klicks im selben Bereich = eine einzige Szene mit zoom. Zoom rein/raus bei jedem Klick verursacht Übelkeit.
  • focus nur für Texteingabe. Ein Textfeld muss lesbar sein; ein Button nicht.
  • 2 bis 3 Sekunden pro Szene. Weniger als 1,5s und niemand liest die Untertitel; mehr als 4s wird zu Leerlauf. Eine gute Demo ist 15–25s lang und hat 5–8 Szenen.
  • Untertitel sind Etiketten, keine Sätze. "Erstellen Sie Ihren Agenten", "Verbinden Sie Ihre Daten". Maximal ~4 Wörter, Verb am Anfang, kein Punkt. Nicht jede Szene braucht einen.
  • Schneiden Sie Leerlauf an der Quelle. Ladevorgänge, Weiterleitungen, Eingangsanimationen: Verwenden Sie settle in der Szene, anstatt Sekunden stillstehen zu lassen im Video.

Die Kamera ist kontinuierlich zwischen Szenen (mit Easing interpoliert), sodass die Bewegung bereits weich ist – versuchen Sie nicht, das im Drehbuch mit zusätzlichen Szenen zu kompensieren.

Die Textebene ist die Erzählung

Es gibt kein Audio (GIF hat keins, und Videos im Feed laufen stumm). Die Geschichte wird durch Typografie erzählt, und die funktioniert nur mit Hierarchie: Wenn jeder Text das gleiche Gewicht hat, weiß der Zuschauer nicht, was Schritt und was Argument ist.

StilRolleWann
title (Szene)Eröffnung/Schluss in Vollbild, mit sub1 am Anfang, manchmal 1 am Ende
heroDer Wendepunkt – groß, zentriert, über Farbverlaufmaximal 1 pro Demo
labelDie Beschriftung des Schritts (Standard), mit optionalem subin den meisten Szenen
statZahl, die das Produkt rechtfertigt: "22s", "3 Klicks"1 im Schluss
noteNebendetail, dezentwenn der Schritt einen Vorbehalt braucht

Zwei Regeln, die den Rest stützen: Ein hero pro Demo (zwei werden zu keinem) und das stat schließt – eine große Zahl bleibt als Letztes im Kopf des Betrachters. Für eine Führungsdemo ist der Bogen meist title → labels → hero im entscheidenden Moment → stat am Ende.

"highlight": true dunkelt den gesamten Bildschirm ab, außer dem Element der Szene. Es ist die stärkste Waffe im Set und daher die leichteste, um sie zu verderben: Verwenden Sie sie, wenn der Zuschauer genau dieses Element mitnehmen muss, nicht als Dekoration. Es kommt herein, nachdem die Kamera sich gesetzt hat, und verschwindet von selbst im Moment der Aktion, um das Ergebnis nicht zu verdecken.

Anmeldedaten

Setzen Sie niemals ein Passwort in demo.json. Zwei Optionen, in dieser Reihenfolge bevorzugt:

  1. "auth": { "storageState": ".auth/state.json" } – bereits eingeloggte Sitzung, einmal erstellt mit node .demo-video/tools/auth.mjs <url> (Browser wird geöffnet, der Nutzer loggt manuell ein).
  2. "auth": { "login": { "user": "#email", "pass": "#password", "submit": "button[type=submit]" } } mit den Anmeldedaten in DEMO_USER / DEMO_PASS in der Umgebung.

Wenn die Demo echte Daten zeigt, verwenden Sie "redact": ["selector"] im Drehbuch, um sensible Elemente vor der Aufnahme unkenntlich zu machen – das wird bereits im PNG unscharf und kann nicht wiederhergestellt werden.

Ausgaben

FormatVerwendungWie
demo.mp4 1920×1080Landing, LinkedIn, YouTubeStandard
demo.gif 960×540README, Docs, E-Mail, HTML--formats mp4,gif (Standard)
demo-square.mp4 1080×1080Instagram/Feed--formats mp4,square

GIF ist groß. render.mjs verwendet bereits palettegen (dedizierte Palette für das Video) über ffmpeg, das in Remotion integriert ist – keine zusätzliche Installation nötig. Trotzdem wiegen 15s bei 960px etwa 3.5MB; für README bevorzugen Sie --gif-width 720 --gif-fps 12, das auf unter 1.5MB reduziert.

Zum Einbetten in HTML: <img src="demo.gif" width="720" alt="...">. Wenn der Nutzer MP4 akzeptiert, <video autoplay loop muted playsinline> wiegt etwa 10x weniger.

Installation testen, ohne das Produkt zu berühren

assets/exemplo/ enthält eine Fake-App (app-exemplo.html) und das dazugehörige Drehbuch, das alle Aktionen übt – title, shot, click, type, select, hold, redact. Führen Sie dies zuerst aus, um zu unterscheiden zwischen "die Skill ist kaputt" und "der Selektor der App ist falsch" – das ist die teure Frage, wenn etwas in der ersten echten Demo fehlschlägt.

Wenn etwas schiefgeht

  • Selektor nicht gefunden → capture.mjs schlägt in der Szene fehl und gibt an, welche. Bitten Sie den Nutzer um URL/Bildschirm und inspizieren Sie mit dem Browser, bevor Sie einen anderen Selektor raten.
  • Zoom unscharf → erhöhen Sie scale auf 3 im Drehbuch (Screenshots 3×) oder reduzieren Sie den Zoom.
  • Video nicht synchron mit Untertiteln → duration der Szene ist maßgeblich; passen Sie sie dort an.
  • Details zu Komposition, Kamera, Cursor und visueller Anpassung: references/remotion.md.

Verwandte Skills