跳到正文
cccskills
免费在 GitHub 公开

demo-video

Record a WebM demo video of a UI flow with shot-scraper video — a YAML storyboard drives the browser (click, type, scroll, wait) with an animated cursor overlay, so a reviewer can watch the feature instead of driving it. Use to attach motion evidence to a UI sign-off (#307), to turn an issue's "How to test" steps into a watchable clip, or when asked to "record a demo", "make a video of this flow", "show me it working".

中文简介正在准备中。当前显示原文说明。

集成工具Playwright
查看安装方法

包含的文件(2)

  • SKILL.md5.1 KB
  • example-storyboard.yml789 B

SKILL.md(原文)

安装前可以查看交给 AI 代理的指令内容。

Demo Video — storyboard-recorded WebM demos

Records a watchable demo of a UI flow using shot-scraper video (Simon Willison, Apache-2.0, Playwright-based): a declarative YAML storyboard opens the app, clicks, types, scrolls and waits — with an injected animated cursor + click-ring overlay so the recording reads like a human demo, not a ghost session.

What this is: evidence capture — the motion analog of scripts/app-shots.mjs. What this is NOT: assertion testing. The e2e harness (/e2e-smoke) remains the correctness gate; Playwright's own video: 'on' test artifacts (#356) remain the test-run recordings. This skill is for narratable demos a reviewer watches.

When to use

  • UI sign-off (#307/#590): alongside the staging preview URL, attach a clip of the flow under review — richer than a PNG, cheaper than the reviewer driving it themselves.
  • ## 🧪 How to test: a storyboard is an executable version of those numbered steps; the video is the before/after evidence.
  • POC demos: show a pocs/* feature working without deploying.
  • On ask: "record a demo", "video of this flow", "show me it working".

Setup (once per session)

bash scripts/demo-video-setup.sh

Idempotent. Installs shot-scraper via pip and makes sure Playwright's expected chromium exists — downloading it where possible, or (in the egress-blocked web harness) symlink-shimming the expected build dirs onto the pre-installed /opt/pw-browsers browsers. Don't hand-roll the shim; don't conclude "no browser" from a failed playwright install (see CLAUDE.md's headless-browser note — same trap).

Recording

  1. Copy example-storyboard.yml (next to this file) and adapt it. The storyboard can boot the app itself via server: (e.g. pnpm dev), or point url: at an already-running server / local HTML file.
  2. Output path: screenshots/<name>.webm — same HARD-GATE location rule as screenshots; *.webm/*.mp4 are gitignored so recordings stay out of commits.
  3. Run it:
shot-scraper video storyboard.yml            # → WebM
shot-scraper video storyboard.yml --mp4      # + MP4 (needs a real system ffmpeg)

Storyboard essentials

output: screenshots/feature-demo.webm
url: http://localhost:3000/        # or omit and use `open:` in the first scene
server: pnpm dev                   # optional: runs while recording, killed after
viewport: {width: 1280, height: 720}
cursor: true                       # the demo-polish switch — keep it on
wait_for: "text=Dashboard"         # recording starts AFTER this settles
scenes:
- name: Create a thing
  do:
  - click: "#new-thing"
  - type: {into: "input[name=title]", text: "Demo item", delay_ms: 40}
  - press: Enter
  - wait_for: "text=Demo item"     # doubles as a weak smoke assertion
  - screenshot: screenshots/feature-demo-result.png   # stills mid-recording
  - pause: 1

Actions: click, type (visible keystrokes) / fill (instant), press, scroll (eased, or to: a selector), pause, wait_for, wait_for_url, open, js, screenshot, sh, python. Full syntax: the video.py pydantic models in the shot-scraper source, or shot-scraper video --help.

Authed apps: log in once with shot-scraper auth <url> auth.json, then record with shot-scraper video storyboard.yml -a auth.json. Never commit auth.json.

Delivering the video

GitHub's API can't attach binary media to comments, so pick by context:

  • Interactive session → send the .webm to the user directly (SendUserFile).
  • PR evidence → upload as a CI artifact (like the #356 e2e reports) and link it from the PR comment; or drag-and-drop manually — a human gesture, not an agent one.
  • WebM plays in every modern browser; only convert to MP4 (--mp4, needs system ffmpeg with libx264) when the audience needs QuickTime/Slack inline.

Gotchas

  • type vs fill: use type with delay_ms: 25–50 for anything on camera — fill is instant and reads as a glitch.
  • Recording starts after the top-level wait/wait_for, so open on a settled page; add a trailing pause: 1 so the last state is visible.
  • A failed wait_for/selector aborts the recording with a Playwright timeout — that's a feature (broken flow ⇒ no misleading demo), but keep storyboards short and re-runnable.
  • sh:/python:/server: in a storyboard are arbitrary code execution — treat third-party storyboards like shell scripts.
  • Videos are viewport-size at 25fps VP8; bigger viewports = bigger files. 1280×720 is the sweet spot.

评价

还没有评价。欢迎分享你的使用感受。

评论

无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。

还没有评论。来写第一条吧。

提交后会立即公开。请勿填写邮箱、电话等个人信息。URL 最多 2 个。

0 / 1000 字

此表单受 reCAPTCHA 保护,适用 Google 的隐私权政策和服务条款。

同一仓库的技能

a11y

免费

Accessibility review for Vue surfaces — the code-cleaning analog of /code-review and /simplify, pointed at WCAG/ARIA. Reviews just your diff (or a package/file), rates findings by severity, and either comments inline on the PR (--comment) or applies the safe fixes for you (--fix). Steers the depth-aware `a11y` subagent. Use when asked to "check accessibility", "a11y this", "audit ARIA/keyboard", or run /a11y.

中文简介正在准备中。当前显示原文说明。

FriendlyInternet/nuxt-crouton102026年10月21日 更新

ask-human

免费

Emit a blocking question the owner can read in ~10 seconds and answer in one reply — the scannable, recommendation-first handoff every agent posts when it hits a fork it can't own. Leads with the one decision + a recommendation, carries the 🤖 provenance header, doubles as the

中文简介正在准备中。当前显示原文说明。

FriendlyInternet/nuxt-crouton102026年10月21日 更新

audit

免费

Audit packages for documentation completeness, detect drift between code and docs, and maintain documentation quality across the monorepo. Use when checking package docs, running audits, or reviewing documentation health.

中文简介正在准备中。当前显示原文说明。

FriendlyInternet/nuxt-crouton102026年10月21日 更新

Author a placeable layout block that looks right at ANY pane size. The one hard rule — size to the PANE with container queries (@container), never the viewport — plus list/form playbooks and the sizing contract (minWidth etc.) the viability metric reads. Use when adding/converting a croutonLayoutBlocks block, or when a block overflows/breaks in a narrow pane.

中文简介正在准备中。当前显示原文说明。

FriendlyInternet/nuxt-crouton102026年10月21日 更新

When a bug or regression is reported, the FIRST step — before fixing — is to research how and when it was introduced (git archaeology), then record that finding on the tracking issue/PR. Use the moment a bug, error, broken build, or "this used to work" is reported, before writing a fix. Produces a first-bad-commit (or "not a code regression") note you paste onto the issue.

中文简介正在准备中。当前显示原文说明。

FriendlyInternet/nuxt-crouton102026年10月21日 更新

commit

免费

Smart, granular git commits following monorepo conventions. Analyzes changes, filters to session-relevant files, groups by intent, and uses conventional commit format. Use when committing code changes.

中文简介正在准备中。当前显示原文说明。

FriendlyInternet/nuxt-crouton102026年10月21日 更新

查看 FriendlyInternet 的全部技能

报告此技能的问题