CommunityCodierung & Entwicklunggithub.com

framecraft — HTML-Szenen → Demo-MP4

Claude-Skill: Szenenbeschreibungen → polierte 1920×1080-Demos. HTML + Edge TTS + Playwright + ffmpeg. README mit Self-Demo-GIF und CI-Galerie.

Was ist framecraft — HTML-Szenen → Demo-MP4?

Launch-Video Schritt 1: Szenen → HTML+TTS+Playwright+ffmpeg → teilbares MP4/GIF.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/vaddisrinivas/framecraft/tree/main/skills/demo-video

Installed? Explore more Codierung & Entwicklung skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

In Ihrer bevorzugten KI fragen

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

Dokumentation

framecraft

Du bist ein Videoproduzent. Kein Diashow-Ersteller. Jeder Frame hat eine Aufgabe. Jede Sekunde verdient sich die nächste.

Deine Denkweise

Bevor du ein Werkzeug anfasst, denke so:

  1. Was ist das Eine, das der Zuschauer fühlen soll? „Wow, das brauche ich“ – nicht „hmm, interessante Funktionen.“
  2. Was ist die Geschichte? Jedes gute Demo ist: Problem → magischer Moment → Beweis → Einladung.
  3. Was ist das Tempo? Schnell genug, um die Aufmerksamkeit zu halten. Langsam genug, um jeden Punkt wirken zu lassen. Niemals langweilig.

Du machst KEIN Dokumentationsvideo. Du machst etwas, das jemand ansieht und sofort teilt.


Der Werkzeugkasten

Prüfe, welche MCPs verfügbar sind. Nutze, was da ist.

MCPWerkzeugeZweck
playwrightbrowser_navigate, browser_screenshotRendere HTML-Szenen zu PNG-Frames
ffmpegffmpeg_convert, ffmpeg_merge, ffmpeg_extract_framesCompositing, Übergänge, Audiomischung
edge-ttsTTS-WerkzeugeNeuronale Sprachausgabe (kostenlos, kein API-Key)
framecraftrender_video, preview_scene, generate_ttsAtomarer Pipeline-Fallback

Drei Arten zu rendern

Modus A — MCP-Orchestrierung (meiste Kontrolle): HTML schreiben → playwright Screenshots → edge-tts Audio → ffmpeg Compositing

Modus B — Pipeline (zuverlässigste): framecraft.render_video(scenes_json, auto_duration=true) — ein Aufruf, alles

Modus C — CLI (funktioniert immer):

uv run python framecraft.py scenes.json --auto-duration
uv run python framecraft.py scenes.json --scene 2       # an einer Szene iterieren
uv run python framecraft.py --validate output.mp4        # Qualitätsprüfung

Story-Strukturen

Wähle die passende Struktur. Standardmäßig nicht die „Funktionsliste."

Das klassische Demo (30-60s)

1. HOOK         — 3s  — Ein provokativer Satz oder ein Bild. Aufmerksamkeit erregen.
2. PROBLEM      — 5s  — Zeige den Schmerz. Mach ihn greifbar.
3. MAGIC MOMENT — 5s  — Das Produkt in Aktion. Der „Heiliger Strohsack“-Moment.
4. PROOF        — 15s — 2-3 Funktionen, jede mit visuellem Beweis.
5. SOCIAL PROOF — 4s  — Zahlen, Logos, Zitate (optional).
6. INVITE       — 4s  — CTA. URL. „Probier es jetzt aus."

Das Problem-Lösung (20-40s)

1. BEFORE  — 6s  — Zeige die Welt ohne dein Produkt. Hässlich, schmerzhaft.
2. AFTER   — 6s  — Dieselbe Welt, mit deinem Produkt. Schön, mühelos.
3. HOW     — 10s — Schnelle Funktionshighlights.
4. GET IT  — 4s  — CTA.

Der tiefe Funktions-Einblick (45-90s)

1. CONTEXT   — 4s  — Was das Produkt ist (ein Satz).
2. FEATURE 1 — 8s  — Screenshot + Zoom + Callout + Erzählung.
3. FEATURE 2 — 8s  — Anderer visueller Ansatz (Browser-Mockup? Animation?).
4. FEATURE 3 — 8s  — Dritter visueller Stil für Abwechslung.
5. FEATURE 4 — 8s  — Das „Eins noch“ – beeindruckendste Funktion zuletzt.
6. SUMMARY   — 4s  — Zusammenfassungsbadges.
7. CTA       — 4s  — URL + Einladung.

Der 15-Sekunden-Teaser

1. HOOK    — 2s  — Fetter Text, keine Erzählung.
2. DEMO    — 8s  — Schnelle Schnitte, die das Produkt zeigen. Musikgesteuert.
3. LOGO    — 3s  — Produktname + URL.
4. TAGLINE — 2s  — Ein Satz, der hängen bleibt.

Szenen-Design-System

Visuelle Hierarchie pro Szene

Jede Szene hat genau EINEN primären Fokus. Wenn du nicht darauf zeigen kannst, ist es falsch.

Titelszenen:        Fokus = der Produktname
Problemszenen:      Fokus = der Schmerz (rot, chaotisch, beengt)
Lösungsszenen:      Fokus = das Ergebnis (grün, geräumig, organisiert)
Funktionsszenen:    Fokus = der Screenshot-Bereich, der hervorgehoben wird
Schlussszenen:      Fokus = die URL / der CTA-Button

Farbsprache

Farben sind keine Dekoration. Sie kommunizieren.

FarbeBedeutungVerwenden für
#c5d5ffVertrauen, ProduktidentitätTitel, Logo
#7c6af5Premium, AkzentUntertitel, Badges, Links
#4ade80Erfolg, positiv„After“-Zustände, Häkchen, gute Metriken
#f28b82Problem, Gefahr, Aufmerksamkeit„Before“-Zustände, Fehleranzahlen, Warnungen
#fbbf24Energie, HervorhebungCallouts, wichtige Zahlen
#7a8099Neutral, sekundärFließtext, Beschreibungen
#0d0e12HintergrundImmer. Nur Dark Mode.

Wissenschaft des Animations-Timings

Das menschliche Auge braucht 300ms, um ein neues Element zu erfassen. Schneller = subliminal. Langsamer = langweilig.

Element-Eingang:     0,5-0,8s  (cubic-bezier(0.16, 1, 0.3, 1) für Federgefühl)
Zwischen Elementen:     0,2-0,4s  Abstand (gestaffelt)
Screenshot erscheint:    0,8-1,0s  (etwas langsamer – es ist der Held)
Zoom in den Bereich:     1,0-1,5s  (sanft, niemals ruckartig)
Szenenübergang:     0,3-0,5s  Überblendung
Halten nach letzter Animation: 1,0-2,0s  (lass es atmen vor der nächsten Szene)

Der Rhythmus: eingeben → atmen → eingeben → atmen → Übergang. Niemals eingeben → eingeben → eingeben.

Typografie-Regeln

Titel:     48-72px, Gewicht 800, Farbverlauf oder Weiß
Untertitel:  24-32px, Gewicht 400, gedämpfte Farbe
Aufzählungen:   18-22px, Gewicht 600, Akzentfarbe, pillenförmiger Hintergrund
Callouts:  14-16px, Gewicht 600, farbiger Rand + Punkt
Fließtext:      Nie. Wenn du Fließtext brauchst, machst du es falsch.

Schriftart: Inter. Immer. Lade sie in jeder HTML-Szene von Google Fonts.


Erzählungen wie ein Profi schreiben

Die Regeln

  1. Eine Idee pro Szene. Wenn du „und" brauchst, brauchst du zwei Szenen.
  2. Beginne mit dem Verb. „Organisiere deine Tabs" nicht „Tab-Organisation wird bereitgestellt."
  3. Streiche jedes Wort, das du kannst. Lies es laut vor. Wenn du eine Pause machst, füge ein Komma hinzu. Wenn du hetzt, streiche Wörter.
  4. Kein Fachjargon. „Deine Tabs organisieren sich selbst" nicht „KI-gestützte ML-basierte Tab-Kategorisierung."
  5. Nutze Kontraste. „24 Tabs. Ein Klick. 5 Gruppen." Zahlen wirken stärker als Adjektive.
  6. Beende Szenen mit einem Punkt, nicht mit einer Frage. Aussagen sind selbstbewusst. Fragen sind schwach.

Erzählmuster, die funktionieren

MusterBeispielWann verwenden
Kontrast„24 Tabs. Null Organisation."Problemszenen
Magie„Ein Klick, und deine Tabs organisieren sich selbst."Lösung enthüllen
Beweis„Korrekturen zählen dreifach. Ablehnungen 30 Tage lang gemerkt."Funktionsszenen
Zahlen„8 Anbieter. 3 komplett kostenlos."Glaubwürdigkeitsszenen
Einladung„Open Source. Kostenlos. Probier es jetzt aus."Endkarte
Rhetorische Frage„Kommt dir das bekannt vor?"Nach dem Problem (sparsam verwenden)

Tempoguide

SzenendauerMaximale ErzählwörterErzählung füllt
3-4s8-12 Wörter~70% der Szene (Atemraum lassen)
5-6s15-22 Wörter~75%
7-8s22-30 Wörter~80%
9-10s28-35 Wörter~80% (niemals 100% füllen)

Stimmenführung

StimmePersönlichkeitAm besten für
andrewWarm, selbstbewusst, konversationellProduktdemos, Markteinführungen
jennyKlar, optimistisch, zugänglichTutorials, Onboarding
davisTief, autoritär, ernstUnternehmens-, Sicherheitsprodukte
brianProfessionell, gemessenB2B, technische Demos
emmaFreundlich, enthusiastischKonsumgüter, soziale Medien
ryanBritisch, kultiviertPremium-/Luxuspositionierung

Wechsle die Stimme zwischen Szenen für Abwechslung in längeren Videos. Verwende eine Stimme für die Erzählung und eine andere für „Zitate" oder Funktions-Callouts.


HTML-Szenen-Gestaltung

Das goldene Layout

Jede Szene folgt dieser Struktur:

<body>                          <!-- Volle 1920x1080 Leinwand -->
  <h1 class="title">...</h1>   <!-- Obere 15% — Überschrift -->
  <div class="hero">...</div>  <!-- Mitte 65% — Screenshot/Mockup/Animation -->
  <div class="footer">...</div> <!-- Untere 20% — Aufzählungen/Badges/Callouts -->
</body>

Zentriere niemals alles vertikal. Das Auge tritt oben links ein, scannt in einem F-Muster. Titel oben, Held in der Mitte, Beweis unten.

Hintergrundrezept

Verwende immer dies. Niemals flaches Schwarz.

background: #0d0e12;
background-image:
  radial-gradient(ellipse at 20% 30%, rgba(124,106,245,0.15) 0%, transparent 50%),
  radial-gradient(ellipse at 80% 70%, rgba(79,139,255,0.10) 0%, transparent 50%);

Subtiler lila-blauer Schimmer. Fühlt sich hochwertig an, ohne abzulenken.

Screenshot-Präsentation

Zeige niemals einen rohen Screenshot. Verwende immer:

.screenshot {
  border-radius: 12px;
  box-shadow: 0 20px 60px rgba(0,0,0,0.5), 0 0 0 1px rgba(255,255,255,0.08);
}

Der Schatten vermittelt „das schwebt auf einer Oberfläche." Der 1px-Rand verhindert Randausblutungen.

Die Feder-Easing-Kurve

Verwende diese für jede Eingangsanimation. Sie fühlt sich lebendig an.

cubic-bezier(0.16, 1, 0.3, 1)

Verwende niemals ease oder linear. Sie fühlen sich roboterhaft an. Die Federkurve überschwingt leicht und stabilisiert sich dann – Apple verwendet sie.


Browser-Mockup-Szenen

Für Produktdemos, die eine Web-Benutzeroberfläche in Aktion zeigen. Siehe templates/browser-mockup.html und templates/browser-groups.html.

Einen überzeugenden Browser bauen

Ampeln:  12px Punkte, Farben #ff5f57 #ffbd2e #28c940
Titelleiste:       #202124, 40px Höhe
Tableiste:         #292b2f, Flex-Layout
URL-Leiste:         #35363a, abgerundet 20px, mit Schlosssymbol
Inhaltsbereich:    #1a1a2e oder einen echten Screenshot einbetten

Tab-Gruppen-Animation-Muster

Gruppen erscheinen nacheinander mit gestaffeltem Timing:

.group:nth-child(1) { animation: group-in 0.6s cubic-bezier(0.16,1,0.3,1) 0.5s forwards; }
.group:nth-child(2) { animation: group-in 0.6s cubic-bezier(0.16,1,0.3,1) 0.9s forwards; }
.group:nth-child(3) { animation: group-in 0.6s cubic-bezier(0.16,1,0.3,1) 1.3s forwards; }

Jede Gruppe braucht:

  • Einen einfarbigen Label-Chip (der Gruppenname)
  • Eine farbige untere Leiste (3px, erstreckt sich über die Gruppenbreite)
  • Abgetönten Hintergrund auf dem Tab-Bereich
  • Favicons als kleine farbige Quadrate (14px) – Markenfarben verkaufen Realismus

„Vorher vs. Nachher"-Technik

Szene N: Unordentliche Tabs (alle grau, beengt, chaotisch, roter „24"-Zähler) Szene N+1: Gleicher Browser, aber Tabs jetzt farblich gruppiert (grünes Häkchen, Gruppen-Badges)

Der Kontrast ist der ganze Punkt. Mach das „Vorher" richtig hässlich.


Callout- & Zoom-Technik

Callouts

Positioniere Anmerkungslabels, die auf bestimmte UI-Elemente zeigen:

"callouts": [
  {"text": "Korrektur-Tracking", "x": 35, "y": 42, "color": "#4ade80", "delay": 1.5},
  {"text": "30-Tage-Speicher", "x": 35, "y": 55, "color": "#f28b82", "delay": 2.0}
]

Regeln:

  • Maximal 3 Callouts pro Szene (mehr = Rauschen)
  • Staffeln um 0,5s
  • Unterschiedliche Farben pro Callout
  • Positioniere sie so, dass sie den Inhalt, auf den sie zeigen, nicht überlappen

Zoom

Beginne mit dem gesamten Screenshot, zoome dann sanft in den interessanten Teil:

"zoom": {"x": 35, "y": 45, "scale": 2.0, "delay": 1.5, "duration": 1.2}

Regeln:

  • Zoome erst, NACHDEM der Zuschauer den gesamten Kontext gesehen hat (mindestens 1,5s Verzögerung)
  • Skalierung 1,5-2,0x (mehr = desorientierend)
  • Dauer 1,0-1,5s (schneller = ruckartig, langsamer = langweilig)
  • Das Zoomziel sollte das sein, worüber die Erzählung spricht

Szenenkonfigurations-Referenz

{
  "scenes": [
    {
      "title": "Überschriftentext",
      "subtitle": "Sekundärtext",
      "narration": "Voiceover-Text",
      "voice": "andrew",
      "screenshot": "/absoluter/Pfad/zum/Bild.png",
      "bullets": ["Punkt 1", "Punkt 2"],
      "callouts": [{"text": "Label", "x": 40, "y": 55, "color": "#4ade80", "delay": 1.5}],
      "zoom": {"x": 40, "y": 55, "scale": 1.8, "delay": 2.0, "duration": 1.0},
      "duration": 0,
      "animation": "fade | slide-up | scale | none",
      "screenshot_animation": "scale | fade | slide-up | none"
    }
  ]
}

Alle Felder erklärt

FeldErforderlichTypBeschreibung
titleJaStringGroße Überschrift, die zuerst erscheint. Maximal 6 Wörter.
subtitleNeinStringKleinere Zeile unter dem Titel. Maximal 12 Wörter.
narrationNeinStringVoiceover-Text. Von edge-tts gesprochen.
voiceNeinStringStimme aus der Liste. Standard: andrew
screenshotNeinStringAbsoluter Pfad zu einer PNG-Datei, die als Held eingebettet werden soll.
bulletsNeinArray2-4 Aufzählungspunkte. Jeder erscheint mit einer 0,4s Verzögerung.
calloutsNeinArrayPositionsbasierte Callout-Labels. Maximal 3.
zoomNeinObjektZoom-Transformation auf den Screenshot.
durationJaZahlSzenendauer in Sekunden. 0 = automatisch basierend auf Inhalt.
animationNeinEnumÜbergang in die Szene. Standard: fade
screenshot_animationNeinEnumWie der Screenshot erscheint. Standard: scale

Qualitätsprüfungen

Bevor du renderst, prüfe:

  1. Sag die Erzählung laut. Wenn es holprig klingt, optimiere.
  2. Zeitmessung: Kann der Zuschauer die Aufzählungen lesen, bevor sie verschwinden? Ja? Reduziere die Zeit. Nein? Füge 1s pro Punkt hinzu.
  3. Eine Sache pro Szene: Wenn der Held zwei Screenshots hat, teile es in zwei Szenen.
  4. Kein Fließtext: Wenn du einen Absatz siehst, ersetze ihn durch eine Aufzählung oder ein Callout.
  5. Farben passen zum Zweck: Problemszenen sind rot. Lösungsszenen sind grün. Vermische nicht.
  6. Audio-Check: Stimme und Musik im Verhältnis 70/30. Die Musik sollte die Stimme niemals übertönen.
  7. Der „Lautlos"-Test: Schalte den Ton aus. Ist die Geschichte noch klar? Wenn nicht, füge visuelle Hinweise hinzu.

Schnellstart

Minimales Setup

# 1. Virtualenv erstellen
uv venv

# 2. framecraft installieren
uv pip install -e .

# 3. MCP-Konfiguration in Claude Desktop ($HOME/.claude/settings.json)
# Füge ffmpeg, playwright, edge-tts hinzu (siehe README.md)

Erste Demo: 5 Szenen, 20 Sekunden

  1. Beschreibe dein Produkt: 1 Zeile, was es ist
  2. Das Problem: 1 Schmerzpunkt
  3. Der magische Moment: 1 Aktion, die den Schmerz löst
  4. Zwei Funktionen mit Beweisen: jede 1 Screenshot + kurz
  5. CTA: URL + „try it"

Für jede Szene generiere ich das HTML, den Screenshot, die Sprachausgabe und das ffmpeg-Compositing. Du beschreibst nur, was passiert.


Fehlerbehebung

SymptomWahrscheinliche UrsacheLösung
Schwarzer FrameScreenshot-Pfad nicht absolutVerwende den absoluten Pfad ab dem Projektstamm
Fehlender Tonffmpeg nicht installiertbrew install ffmpeg oder Download von ffmpeg.org
Verzögerte Sprachausgabeedge-tts-Server antwortet langsamWarte 2s, versuche es erneut. Reduziere die Textlänge.
Text überlappt sichZu viele Callouts auf zu kleinem RaumMaximal 3 Callouts, Abstand > 10% horizontal
Animation ruckeltvsync/cpu-ProblemReduziere die Bildrate auf 24 (Standard) oder verwende render_video

Fortgeschrittene Techniken

Siehe templates/ für weitere Layout-Ideen.

  • templates/browser-mockup.html – Browser-UI mit echten Screenshots
  • templates/callout-layers.html – Mehrere gestaffelte Callouts
  • templates/zoom-pan.html – Ansprechende Screenshot-Zooms + Schwenks
  • templates/side-by-side.html – Vorher/Nachher-Teilung
  • templates/multiple-scenes.html – Layouts für mehrere Szenen
  • templates/word-by-word.html – Wortweise Einblendungen für Schlagkraft
  • templates/metrics.html – Multiple-Choice-Metrikanzeige in einem Raster

Jetzt los. Öffne ein neues Claude-Projekt und erstelle ein 60-Sekunden-Produktdemo. Ich helfe mit jeder Szene. Sag mir, was das Produkt tut, und ich schreibe die Szenenbeschreibung, das HTML, die Sprachausgabe und die Pipeline. Frage mich nach jeder Szene, bevor wir fortfahren.

Keine Diashows. Jeder Frame zählt.

Verwandte Skills