Was macht showcase-capture?
Verwende diese Fähigkeit, wenn jemand Screenshots, ein GIF oder eine WebM-Durchlaufaufnahme eines Webprojekts wünscht. Das Tool führt Playwright gegen eine lokale oder Live-Seite aus, folgt einem deklarativen Szenario und erstellt eine README sowie eine Galerie.
Was erstellt wird
screens/*.pngREADME.mdmit den Screenshots und Bildunterschriftenindex.htmlGalerieshowcase.jsonManifest- optional
*.gif - optional
*.webm
Installation
Aus dem Skill-Verzeichnis:
node scripts/install.mjs
Aus dem npm-Paket:
npx showcase-capture install
Oder manuell:
npm install
npm run build
npx playwright install chromium
Überprüfe die Umgebung:
npx showcase-capture doctor
Arbeitsablauf
-
Projektdurchsicht.
- Framework und Dev-Befehl.
- Build-Ausgabeverzeichnis für statische Seiten.
- Routen und wichtige Bildschirme.
- Authentifizierungsablauf und Testbenutzer.
- Seed- oder Reset-Mechanismus, normalerweise localStorage oder Cookies.
- Die 5 bis 8 Bildschirme, die das Produkt am besten erklären.
- Ein End-to-End-Ablauf für das GIF und das WebM.
-
showcase.config.yamlschreiben.- Verwende eine statische, Befehls- oder Live-URL als Server.
- Verwende Rollen und zugängliche Namen vor CSS-Selektoren.
- Füge einen
reset-Block hinzu, damit jede Szene aus einem bekannten Zustand startet. - Verwende
maskfür E-Mails, Tokens, Namen und Zahlungsdetails. - Halte den GIF-Ablauf kurz: 20 bis 40 Sekunden.
-
Szenario validieren. Dies überprüft die Szenen und den GIF-Ablauf.
npx showcase-capture check
- Aufnahme.
npx showcase-capture capture
-
Ausgabe überprüfen.
- Öffne
README.mdundindex.html. - Überprüfe das GIF und das WebM.
- Korrigiere fehlende Selektoren, schlechte Ausschnitte oder Timing-Probleme.
- Führe während der Iteration erneut mit
--only <scene>aus.
- Öffne
-
Die Konfiguration und die generierte Ausgabe committen.
Konfigurationsbeispiel
name: LaunchPad
baseUrl: http://localhost:5173
outDir: docs/showcase
server:
mode: command
command: npm run dev
url: http://localhost:5173
reset:
localStorage:
- launchpad.demo.v2
context:
locale: en-ZA
timezoneId: Africa/Johannesburg
fixedTime: "2026-11-09T09:00:00+02:00"
reducedMotion: reduce
viewports:
desktop: { width: 1440, height: 900 }
mobile: { width: 390, height: 844 }
scenes:
- name: desktop
viewport: desktop
steps:
- goto: /
- waitFor: h1
- screenshot: 01-home
- goto: /login
- waitFor: form
- click:
role: button
name: Continue as test user
- waitForUrl: "#/app/dashboard"
- screenshot: 06-dashboard
- name: mobile
viewport: mobile
steps:
- goto: /login
- waitFor: form
- click:
role: button
name: Continue as test user
- waitForUrl: "#/app/dashboard"
- screenshot: 21-mobile-dashboard
gif:
viewport: { width: 1024, height: 640 }
size: { width: 960, height: 600 }
fps: 8
steps:
- goto: /
- caption: [1, Discover, "Learn, match and book in one place"]
- wait: 600
- scroll: 660
- goto: /learn
- caption: [1, "Explore six practical modules", "Built around real freelance questions"]
video:
enabled: true
size: { width: 1280, height: 720 }
Server-Modi
Statische Seite:
server:
mode: static
dir: dist
spa: true
Entwicklungsserver:
server:
mode: command
command: npm run dev
url: http://localhost:5173
Live-URL:
server:
mode: none
baseUrl: https://example.com
Optionaler Build-Schritt vor dem Ausliefern:
build: npm run build
Overlay
Das GIF-Overlay ist optional. Verwende es, um es an die Marke des Projekts anzupassen oder die Bildunterschrift von wichtigen Inhalten fernzuhalten.
overlay:
background: "rgba(8, 20, 38, 0.93)"
accent: "#5367e8"
font: "Inter, system-ui, sans-serif"
offsetX: 24
offsetY: 24
Setze overlay.enabled: false, um das GIF ohne Bildunterschriften oder Cursor aufzuzeichnen.
Schritt-Referenz
goto: /pathwaitFor: h1oderwaitFor: { role: heading, name: Dashboard }click: ".selector"oderclick: { role: button, name: Continue }fill: { selector: "#email", value: "[email protected]" }press: Enterhover: ".card"waitForUrl: "#/app/dashboard"oderwaitForUrl: { pattern: "/app/", flags: "i" }wait: 500scroll: 600oderscroll: { selector: ".footer" }screenshot: 01-homescreenshot: { name: 01-home, fullPage: true }viewport: mobilecaption: [1, "Title", "Subtitle"](nur GIF-Ablauf)reset: trueeval: "localStorage.setItem('key', 'value')"run: function(nur TypeScript- oder JavaScript-Konfiguration)
TypeScript-Konfiguration
Verwende eine TypeScript-Konfiguration, wenn das Szenario benutzerdefinierte Logik benötigt:
import { defineShowcase } from 'showcase-capture'
export default defineShowcase({
name: 'My project',
outDir: 'docs/showcase',
server: { mode: 'static', dir: 'dist' },
scenes: [
{
name: 'desktop',
steps: [
{ goto: '/' },
{
run: async ({ page }) => {
await page.evaluate(() => localStorage.setItem('theme', 'light'))
},
},
{ waitFor: 'h1' },
{ screenshot: '01-home' },
],
},
],
})
Datenschutz
- Erfasse keine Admin-Bildschirme, Geheimnisse, Tokens oder Zahlungsdetails.
- Verwende
maskfür E-Mails, Namen und Kontodaten. - Verwende ein Testkonto mit fiktiven Daten.
- Überprüfe das GIF und das WebM vor der Veröffentlichung.
- Das Tool lädt nichts hoch.
Fehlerbehebung
Could not launch Chromium: führenpx playwright install chromiumaus oder setzeCHROME_PATH.Server did not respond: überprüfe den Befehl, den Port und die URL. VerwendereuseExisting: true, wenn der Dev-Server bereits läuft.waitForläuft ab: bevorzugegetByRole-Selektoren, überprüfe den Seitentitel oder füge einwaithinzu.- GIF ist zu lang: kürze die Schritte, reduziere
fpsoder verkleinere den Viewport. - WebM fehlt: stelle sicher, dass
video.enabledwahr ist und eingif-Ablauf existiert. - Screenshots haben die falsche Größe: setze den Viewport in der Szene oder Konfiguration.