calesthio/screen-demo-production
Provider-independent workflow for producing terminal, IDE, documentation, browser, desktop, and application demonstration videos. Use when choosing authentic capture, browser automation, synthetic UI, or hybrid treatment; scripting actions and narration; resetting demo state; protecting secrets and personal data; directing cursor/callouts; creating crop variants; and reviewing workflow truth, readability, accessibility, and provenance.
npx skills add https://github.com/calesthio/generative-media-skills --skill screen-demo-production
Use this skill when the central evidence is an interface being operated over time: commands run, files change, controls activate, application state changes, or a workflow completes.
This is broader than SaaS marketing. It covers instructional, support, onboarding, engineering, release-note, internal-training, terminal, IDE, browser, desktop, remote-desktop, and multi-application demonstrations.
Tool and OS behavior is volatile. Facts were verified 2026-07-12. Record product/build, browser/OS, automation/capture versions, fixtures, mocks, and permissions.
Every demo must declare one:
Choose the least invasive mode that supports the intended claim. Synthetic UI is appropriate for conceptual or privacy-sensitive explanation; browser automation for repeatable real web flows; OS/window capture when native chrome, terminal/IDE behavior, permissions, or cross-app interaction matters.
Do not present simulated data or mocked services as proof of live performance, security, a transaction, benchmark, or customer outcome.
This skill owns capture-mode choice, workflow scripting, reset, privacy review, readability, cursor/callout direction, narration/caption synchronization, aspect variants, retakes, QA, and provenance.
It does not replace generic Playwright/test architecture, campaign positioning, website visual showcases without an operational workflow, general editing craft, or application accessibility conformance testing.
Define:
Use a shot ledger:
beat | claim | start state | action | readiness signal | result | narration | cursor/callout | hold | reset
Prefer disposable directories, dedicated demo accounts, seeded fixtures, idempotent reset endpoints, fixed locale/timezone/clock, pinned dependencies, blocked notifications, and versioned mocks.
A fresh browser context isolates browser storage such as cookies and local storage, but it does not reset external database or account state. Test reset plus workflow repeatedly before recording. Every nondeterministic branch becomes an explicit branch, controlled dependency, or reason to change capture mode.
Documented facts from Playwright:
networkidle as a readiness signal and identifies fixed waitForTimeout() delays as flaky.Wait for business-observable states: exact URL, response, heading, status message, enabled control, updated row, or persisted result. Separate machine readiness from viewer pacing: assert the state, then add an editorial hold.
Mock only what the truth claim permits. Disclose mocked external systems or fixed clocks. A controlled authentic UI can remain valid evidence of interface behavior, but not of the mocked provider's real response or speed.
Treat video, trace, HAR, logs, storage state, screenshots, and console output as separate sensitive artifacts. Scrubbing one does not sanitize the others.
Browser getDisplayMedia() requires current user activation and a fresh user choice of surface; audio support varies. Operating-system capture may require permission and may display capture indicators.
For real capture:
Do not rely on crop or blur as the only privacy strategy. Avoid recording sensitive pixels in the first place.
Synthetic output is useful when commands/results are known, validated, privacy-sensitive, or need exact narration timing.
Synthetic reconstruction should improve legibility and pacing, not falsify what happened.
Narrate intent before action and interpret the result afterward. Avoid speaking a changing label at the exact moment it changes.
Production heuristics:
An automation assertion can complete faster than a viewer can comprehend. Add an editorial hold after readiness, not arbitrary sleeps before it.
Narration should explain purpose and consequence, not repeat every control label. Use exact UI names where they help task completion.
Prerecorded synchronized media with meaningful audio needs captions. Important visual-only state changes should be conveyed in narration, transcript, or audio description as required. Captions must not cover controls, errors, code, or output.
Run three tests:
Minimize collection and capture only what serves the declared purpose. Establish access controls, retention, deletion, and reviewer responsibility for raw captures and diagnostic artifacts.
Scrub:
Do not claim that a digital signature or C2PA record proves the depicted workflow occurred or that every assertion is true. Provenance can make signed records tamper-evident and record ingredients/actions.
Design from the final delivery raster:
Author portrait and square variants as compositions. Center-cropping desktop footage often removes navigation, labels, or result state. Re-run or recompose when the workflow does not fit.
Retake by state-bounded beat or chapter. Save handles around transitions. Keep a take log with fixture/build, start/end state, failures, and selected take.
Editing may remove waits, but must not create impossible causal order, hide an error that changes the claim, or present a later success as the immediate result of a failed action.
Verify:
10. provenance ledger and hashes.
This is a complete example, not a mandatory formula.
Intent: 32-second tutorial of fictional acme deploy without showing a real shell or secrets.
Validate commands in a disposable fixture using UTC, fixed locale/terminal width, temporary home, seed demo-17, and a local fake endpoint. Save only approved output. Render synthetic terminal at 1920x1080 with large mono type and make a separate 1080x1920 layout.
$ acme init storefront --seed demo-17
Created storefront/acme.yaml
$ acme deploy --environment preview
Building 6 assets...
Preview ready: https://preview.example.test/storefront
$ acme status
storefront preview healthy revision 8c41d2
Timeline: establish objective; type/run init; hold created-file result; deploy with deterministic progress; hold URL; run status; hold healthy state. Narration introduces intent and interprets result. Rebuild from transcript for every take and label it “synthetic terminal demonstration based on fixture-validated output.”
Likely failure: output was not actually validated. Relabel as illustrative or validate before publication.
This is a complete example, not a mandatory formula.
Intent: 45-second support training showing an operator resolving a staged order issue.
Seed a dedicated account/order/ticket through an idempotent reset. Freeze time/locale, block notifications/analytics, and disclose a mocked external shipping provider. Use a fresh context, protected auth state, and explicit 1920x1080 viewport/video size.
Wait for exact headings/statuses and response/state changes; do not use sleeps or networkidle. Rehearse with trace, then scrub/delete diagnostic artifacts and capture a clean run. A post-produced cursor settles before targets. Run reset and flow three times. QA PII, captions, console/network errors, mocked-service disclosure, final crops, and ledger of build/fixture/automation/cursor edits.
Likely failure: the success UI appears but persistence is not verified. Add an observable persisted-state assertion before the editorial hold.
Verified 2026-07-12:
getDisplayMedia: https://www.w3.org/TR/screen-capture/ and https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getDisplayMediaTake calesthio/screen-demo-production from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.