Communitygithub.com

evgenspm/launchfilm

Qualitätssicherung eines gerenderten Launch-Films, bevor er ausgeliefert wird. Einsetzbar für 'Video-QA', 'Render prüfen', 'Bereit zum Posten?', 'Film review', 'Warum sieht es billig aus?', 'Untertitel/Safe Zones/Lautstärke prüfen' – nach jedem Render und vor dem Paketieren. Liest den automatischen CLI-Report (`npx launchfilm qa <slug>`), Kontaktbögen und Standbilder zu Schlüsselzeitpunkten und prüft Lesbarkeit von Text-über-Zeit, Kontrast, Plattform-Safe-Zones, Lautstärke (−14 LUFS, −1.5 dBTP), ffprobe-Encode-Spezifikationen, schwarze und eingefrorene Frames, Schnitte auf den Beat sowie die 12 Amateur-Fehler als Blocking-Checks. Schreibt `qa/<slug>/QA.md`, wobei jede Zeile eine Datei oder einen gemessenen Wert zitiert. Ein nicht durchgeführter Check vermerkt NICHT GEPRÜFT, niemals BESTANDEN. Verwende "scene-build", um gefundene Bildprobleme zu beheben, "sound" für die Tonmischung, "launch-film" für die gesamte Pipeline, "reference-study" für Referenzvideos.

Was ist launchfilm?

Dieses Skill dient der professionellen Qualitätssicherung von gerenderten Launch-Filmen. Es analysiert automatisch generierte Berichte, Kontaktbögen und Standbilder, um technische und handwerkliche Mängel zu identifizieren, bevor ein Film veröffentlicht wird. Es prüft rigoros eine Vielzahl von Kriterien, darunter Lesbarkeit von Text-über-Zeit, korrekte Safe-Zones für verschiedene Plattformen, Einhaltung der Lautstärkenormen (−14 LUFS, −1.5 dBTP), Kodierungsfehler und die 12 häufigsten Amateur-Fehler (die "12 Tells"). Das Skill schreibt einen detaillierten QA-Bericht (`QA.md`), der jeden Befund mit Beweisen wie Dateipfaden oder Messwerten belegt. Es ist für Entwickler-Teams und Kreative gedacht, die mit Tools wie Remotion, launch-film, scene-build und sound arbeiten und sicherstellen möchten, dass ihre Render lieferbereit sind. Die Plattformen umfassen CLI-basierte Workflows, bei denen jeder Check entweder BESTANDEN, NICHT BESTANDEN oder NICHT GEPRÜFT (mit Begründung) ist. Das Skill zwingt zu maximal zwei Korrektur-Schleifen, bevor es verbleibende Fehler meldet.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/evgenspm/launchfilm/tree/HEAD/skills/film-qa

In Ihrer bevorzugten KI fragen

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

Dokumentation

film-qa

Du prüfst Frames und Zahlen, nicht Absichten. Ein BESTANDEN braucht Beweise: einen Dateipfad, den du geöffnet hast, oder eine Zahl, die du gemessen hast. Alles andere ist NICHT GEPRÜFT: <Grund>. Schreibe niemals BESTANDEN für etwas, das du nicht angesehen oder gemessen hast.

Pfade (relativ zu launch-video/ oder studio/ im launchfilm-Repository): Filmquelle films/<slug>/ (film.json, STORYBOARD.md, BRIEF.md), Render out/<slug>/, QA qa/<slug>/ (die CLI schreibt report.md; du schreibst QA.md daneben). Exakte CLI-Flags: npx launchfilm <cmd> --help. Befehle mit getesteter Syntax: references/commands.md.

Verfahren

  1. Automatischer Durchlauf. npx launchfilm qa <slug> → lies zuerst qa/<slug>/report.md (Kontaktbögen, ffprobe, Lautstärke, automatische Prüfungen). Kopiere seine gemessenen Zahlen in QA.md als Beweis; miss nicht erneut, was es gemessen hat.
  2. Kontaktbögen. Öffne jeden Kontaktbogen, den der Bericht auflistet (oder npx launchfilm sheet <slug>). Lies jede Zelle. Liste die Dateien, die du geöffnet hast, in QA.md auf (T12-Beweis).
  3. Standbilder. npx launchfilm still <slug> <t> --preset <id> für jedes Preset, das der Film ausliefert, bei: jeder Aufnahmegrenze
    • 6 fr, jedem Texteinsatz + Halte-/2, Frame 0, dem letzten Frame und jedem Intervall, das der Freeze- oder Black-Frame-Scan markiert. Plus ein Standbild bei --scale 0.25 (480×270 für 16:9) auf dem Helden-Text-Frame: die X-Timeline-Vorschau. Lies jedes PNG.
  4. Messe, was der Bericht nicht gemessen hat: Lautstärke, True Peak, schwarze Frames, eingefrorene Intervalle, Schnittzeitpunkte vs. Beats, Kontrast hinter Text, Safe Zones, Bildzeilenlängen. Befehle in references/commands.md.
  5. Blocking-Checks T1–T12 unten, dann Lieferchecks D1–D16. Jeder erhält BESTANDEN / NICHT BESTANDEN / NICHT GEPRÜFT + Beweis + Regel.
  6. Schreibe qa/<slug>/QA.md von references/qa-template.md.
  7. Korrektur-Schleife. Jedes NICHT BESTANDEN: gib den Befund an scene-build oder sound mit Frame-Nummern weiter, rendere nur den betroffenen Bereich neu (npx remotion render … --frames=<a>-<b> oder das CLI-Äquivalent), überprüfe diese Punkte erneut. Maximal 2 Schleifen; melde dann die verbleibenden NICHT BESTANDEN dem Benutzer mit beigefügten Standbildern. Stufe niemals ein NICHT BESTANDEN auf BESTANDEN herab, ohne neue Beweise.

Blocking-Checks: die 12 Tells (craft/00)

IdBestehensbedingungBeweis
T1 statischkein eingefrorenes Intervall ≥ 0,6 s außer der Endcard-Settle (≤ 3 s); jedes markierte Intervall durch Standbilder an seinem Start und Ende mit Drift oder Bewegung verifiziertfreezedetect-Ausgabe + 2 Standbilder pro Intervall
T2 Standard-Easinggrep G1 (scene-build) leer in films/<slug>; keine CSS-Transitionsgrep-Ausgabe
T3 alles auf einmaljede Gruppe von ≥ 3 Geschwistern tritt gestaffelt ein (partielle Zustände in einer Kontaktbogenzelle sichtbar oder Staffelung ≥ 1 fr im Code); Gruppen-Eintritt ≤ 24 frKontaktbogen-Zell-Referenzen oder Code-Zeilen
T4 eine GeschwindigkeitFilm > 20 s hat ≥ 1 Rhythmusbruch (Stille, Smash Cut zu Schwarz, Palette Flip, Halten ≥ 2× median shot); Launch-Modus: jeder Schnitt innerhalb ±2 fr eines Beatsfilm.json-Grenzen vs. beats.json; erkannte Schnitte
T5 Soundjedes visuelle Ereignis in film.json hat ein SFX oder wird von VO/Musik abgedeckt; Musik duckt unter VO; echte Stille, wo geplantEreigniszählung mit/ohne Sound; Lautstärke eines VO-Fensters vs. eines Musik-Fensters
T6 Text als LabelHelden-Text ≥ 8 % der Frame-Höhe, wenn Text die Nachricht ist (Aussagen 10 %); jeder Text hält ≥ 0,2 × (Wörter + 1) s; ≤ 3 Zeilen; Untertitel ≤ 2 ZeilenTabelle pro Eintrag
T7 flaches AussehenLaunch-Modus: Grain + Vignette vorhanden; eine benannte Treatment pro Sektion; Produktmodus: Haarfeinheiten, weiche Schatten; kein Banding im dunkelsten Gradienten des mp4-Standbildsgrep + Standbild aus dem mp4
T8 Web-Layoutein Brennpunkt pro Standbild; kein Absatz > 3 Zeilen; keine Aufzählungszeichen; UI-Chrome nur, wo das Chrome der Punkt istStandbilder
T9 generisches Stockjedes Footage-Clip in films/<slug>/footage/SOURCES.md mit Quelle + Lizenz; Stock-Clips abgestuft und ≤ 1,5 s geschnittenSOURCES.md + Standbilder
T10 dekorative ÜbergängeÜbergänge ⊂ Vokabular; Nicht-Schnitt-Übergänge ≤ 1 pro 5 s; blur-dissolve ≤ 12 frfilm.json
T11 Vorlage vor GeschichteSTORYBOARD.md hat approved:; Frame 0 nicht schwarz und unterscheidet sich vom Standbild bei 0,5 s; Kategorie des Produkts klar bis 1,5 s (x, li) / 1 s (reel); Auszahlung nach dem Problem; ≥ 2 s Ruhe auf Markenoberfläche am EndeStandbilder 0, 0,5, 1,5 s, letzte 2 s
T12 nie hingesehendiese QA: jeder Kontaktbogen und jedes Standbild als geöffnet aufgelistetDateiliste in QA.md
Jedes NICHT BESTANDEN in T1–T12 blockiert Render-zum-Versand und Paket.

Lieferchecks (pro Preset; Nummerierung = craft/08#delivery-checks)

Werte aus harness.config.json presets, sonst craft/10#presets. Verwende diese IDs exakt; craft/08 und QA.md teilen sie.

IdBestehensbedingung
D1Video h264, Profil High (Remotions ffprobe druckt 100), pix_fmt yuv420p, Container mp4
D2Breite × Höhe exakt die des Presets
D3konstante fps = Kompositions-fps (r_frame_rate = avg_frame_rate)
D4Dauer = film.json ±1 fr und innerhalb des Längenbereichs des Presets (x-16x9 ≤ 140 s, reel-9x16 ≤ 90 s)
D5Audio aac LC (Remotions ffprobe druckt 1), 48000 Hz, 2 Kanäle, ~192 kbps; hero-loop: kein Audiostream
D6integrierte Lautstärke −14 ±1 LUFS; True Peak ≤ −1,5 dBTP; VO −16…−14 LUFS, wo messbar
D7moov vor mdat (faststart)
D8Poster = Frame 0 dieses Presets vorhanden, gleiche Größe, nicht schwarz (YAVG > 20), zeigt den Hook
D9SRT neben dem Render für jedes Preset mit VO; dieselben Phrasen wie die Untertitel; HH:MM:SS,mmm; ≤ 2 Zeilen; ≥ 0,8 s jede; Zeiten ±2 fr
D10nichts Wichtiges (Untertitel, Text, Logo, die verwendete UI) außerhalb der Safe-Zone des Presets (Overlay-Standbild)
D11Untertitel eingebrannt auf jedem Preset mit VO (hero-loop: keine, ph-16x9 gemäß seiner Konfiguration); ≤ 2 Zeilen; ≤ 42 Zeichen/Zeile (16:9), ≤ 32 (4:5, 1:1, 9:16); niemals über dem sich ändernden Element; Kontrast ≥ 4,5:1 für Untertitel und Text über Footage, ≥ 3:1 Akzent auf Hintergrund; lesbar auf den 480 px (16:9) und 360 px (4:5, 9:16) breiten Standbildern
D12Freeze- und Black-Listen stimmen mit den vorgesehenen Halten und Black-Beats überein (nur die in film.json oder STORYBOARD aufgeführten)
D13BT.709-Tags oder ungetaggt HD; der dunkelste Gradient zeigt keine neuen Banding-Artefakte im mp4-Standbild vs. dem PNG
D14Dateigröße unter dem Limit: x ≤ 512 MB, README hero ≤ 10 MB
D15out/<slug>/credits.txt listet jedes CC BY-Asset mit seinem Credit auf; films/<slug>/footage/SOURCES.md vollständig
D16hero-loop nur: Frame N gleich Frame 0; eine 3× geloopte Datei zeigt keinen Sprung an den Nahtstellen

Text-über-Zeit-Lesbarkeit

Für jedes Textelement in film.json (Aussagen, Untertitel, Labels, UI-Kopien, auf die die VO zeigt): Wörter, In/Out-Frames, Halten = (Out − In) / fps, erforderlich = 0,2 × (Wörter + 1) s. Überprüfe auch beim 480×270-Standbild, dass die Heldenzeile noch lesbar ist (Buchstaben unterscheidbar). Eine Zeile pro Eintrag in QA.md.

Regeln für den Bericht

  • Jedes BESTANDEN zitiert Beweise: qa/<slug>/stills/x-16x9-12.30.png, I = −14,2 LUFS, grep G1: 0 Zeilen.
  • Gemessene Zahlen behalten Einheiten und das Werkzeug, das sie erzeugt hat (system ffmpeg 8.1 ebur128 oder remotion ffmpeg loudnorm). Remotions gebündeltes ffmpeg fehlt ebur128, signalstats, freezedetect, tile, drawbox und rawvideo-Ausgabe: verwende ein System-ffmpeg dafür und gib das an; falls keines existiert, sind diese Punkte NICHT GEPRÜFT.
  • Ein NICHT BESTANDEN nennt den Frame-Bereich, die Regel (craft/NN#anchor oder T#/D#) und den vorgeschlagenen Fix.
  • Der Zusammenfassungsblock sagt FERTIG nur, wenn T1–T12 und D1–D16 alle BESTANDEN sind (D16 nur für hero-loop) (NICHT GEPRÜFT zählt als nicht fertig, mit Grund).

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

evgenspm/launchfilm

Brand intake for a launch film, product video or promo: capture the product's real colors, fonts, logo, radius and theme from the user's repo (Tailwind config, CSS variables, shadcn tokens, next/font, logo SVG), then the live website, then screenshots, and write films/<slug>/brand.json with a source for every value. Use when starting a new film, when the brand, logo or colors changed, or when the user says "use my brand / my colors / my logo". Hard stop if capture fails: never invent a logo or colors. Not for picking a look or grade (scene-build, craft/06) or for writing copy (story).

evgenspm/launchfilm

Launch video, launch film, product video, product launch, promo, teaser, trailer, demo video, Product Hunt video, X / LinkedIn launch clip, reel, hero loop, motion graphics, "make a video for my product", Remotion film. Router and gated pipeline for making a pro product-launch film with the launchfilm studio in ./launch-video: brief, brand intake, story and storyboard (user approves), sound, scene build, frame QA, render per platform preset, package, post copy, one-time credit note. Use this first for any request to make, remake or revise a launch or product film; it calls the sibling skills (brand-intake, story, sound, scene-build, recipes, film-qa, launch-post). Do not use it to study a reference video (use reference-study), to browse recipes only (use recipes), or for generic Remotion questions unrelated to a launch film.

evgenspm/launchfilm

Write the launch post that goes with the film: X / Twitter post, LinkedIn post, Product Hunt tagline, description and maker comment, written in the founder's own voice, concrete, no AI slop ("excited to announce", em dashes, buzzwords). Triggers: write the tweet, launch post, LinkedIn post, Product Hunt copy, PH tagline, maker comment, caption for the video, announcement copy. Use after the film is rendered (or when the user asks for post copy for an existing film); starts from `npx launchfilm post <slug>` and the film's BRIEF.md and STORYBOARD.md, writes out/<slug>/POST.md. Never posts anything. Not for the film's own on-screen script or VO (story).

evgenspm/launchfilm

Find launchfilm recipes (published launch films studied frame by frame and written down as text, some with ready Remotion code) and build the user's film from 1 to 3 of them. Use for "use a template", "start from a recipe", "make a 30s launch film from recipe <id>", "something like this style", "show me options", "which recipe fits a 30 s vertical launch", "remix recipe X with our brand", or when a storyboard needs a proven hook, feature beat, logo reveal or end card. Searches recipes/CATALOG.md or recipes/index.json, scores and picks 1 to 3, shows each with its source link, reads the recipe.md beat sheet, then scaffolds with `npx launchfilm new <slug> --recipe <id>`: ready code when Recipe.tsx exists, else TODO scenes built from the beat sheet with studio presets, keeping the recipe's timings, springs and sounds re-timed to the user's length and beat grid. Use reference-study to make a new recipe, story for the storyboard, scene-build for scenes, launch-film for the whole pipeline.

Verwandte Skills