{"id":15794,"plugin_id":"Plugin_55ed66408350819183be8eb8c0b045a7","kind":"skill","collection_source":null,"comparison_source":null,"observed_at":"2026-09-30T23:12:04.759Z","digest":"a6f9fdaa09514fe9af9e2014dcdff8310d7239ddd3ddae58c74779be3991e64f","against":null,"payload":{"description":"Create a demo from new or existing footage, with captions, zooms, privacy masks, and optional cursor animations or input badges.","included_files":[{"relative_path":"agents/openai.yaml","size_in_bytes":201},{"relative_path":"references/screenplay-contract.md","size_in_bytes":5023},{"relative_path":"scripts/capture.mjs","size_in_bytes":5243}],"name":"create-demo-video","skill_md_contents":"---\nname: create-demo-video\ndescription: Create a demo from new or existing footage, with captions, zooms, privacy masks, and optional cursor animations or input badges.\n---\n\n# Create a demo video\n\nUse Cirro to turn a recording into a product demo. Keep the original recording and write\ngenerated files outside tracked repository paths.\n\nWhen footage is needed, use [Capture Demo Video](../capture-demo-video/SKILL.md).\n\nFollow [Set up Cirro](../setup/SKILL.md) to prepare its launcher before editing. The\nexamples use the macOS/Linux launcher; pass the same arguments on Windows.\nIf setup fails, report the blocker; do not substitute another editing pipeline.\nUse Cirro to validate and render the final screenplay, fixing validation errors\nbefore delivering the video.\n\n## Inspect the recording\n\nCirro produces VP9/WebM video without audio and can also read supported MP4 recordings.\n\n```sh\nsh /absolute/path/to/setup/scripts/cirro.sh schema\nsh /absolute/path/to/setup/scripts/cirro.sh inspect /absolute/path/recording.webm --json\n```\n\nRead the schema and [editing guide](references/screenplay-contract.md). Check the\nrecording's dimensions, duration, interface states, and frames around important\ntransitions. Before choosing the trim, identify the outcomes the user's request or\nsession summary says the demo should show, then locate their evidence in the footage.\nKeep the setup and result for those outcomes. A short demo can compress pauses without\nreducing a multi-step walkthrough to its last interaction. For a failure and retry,\nlet the viewer recognize the failure, retained work, and eventual result.\n\nShow the starting state, interaction, response, and result. Use short captions to\nexplain what's happening.\n\nFor cursor animations and input badges, use actual event logs with coordinates in\nrecording pixels and timestamps in milliseconds from the first video frame. Keep drag\nendpoints and button metadata; map tool names only when their meaning is known.\n\nOmit `recording.events` when logs are unavailable. The renderer then keeps any cursor in\nthe recording and adds no cursor animation or input badges. If the recording already has\na cursor, omit pointer events to avoid drawing a second one; reliable keyboard events\ncan still produce input badges. Use cursor-free footage when supplying pointer events.\nNever invent events from screenshots.\n\nSummarize ordinary typing by count. Protected typing must contain neither its value nor\nits length. Review the visible interactions as well as the finished file.\n\n## Edit the video\n\nKeep one continuous section of the recording. Trim the beginning or end and speed up\nidle time instead of adding gaps, repeats, freezes, or invented actions. Keep enough of\nthe opening to establish where the viewer is and what will change. Keep important\nactions and their visible results, including the final success or failure, readable.\nCompress idle waits aggressively, but preserve time to recognize each new state.\nThe renderer shows a double-chevron icon during\nfast-forward and adds elapsed source time after ten seconds.\n\nStart at full-frame zoom 1. Use a zoom only when it reveals a detail the viewer would\notherwise miss. Use a short, deliberate transition, then hold the same framing through\nthe action and result. Avoid a slow zoom throughout a scene or an immediate zoom-out\nthat competes with the action. Keep the cursor, target, and relevant result inside the\nframe; show enough context to follow scrolling and movement between controls.\n\nHighlight visible results sparingly. Inspect the target's bounds in the actual frame;\nuse balanced padding that separates the annotation from the UI without covering nearby\ncontrols. Start the highlight after its target appears and end it before the target\nmoves or disappears. Map source times through speed changes before timing overlays.\n\nUse ASD-STE100-inspired language for captions: short sentences, active voice, familiar\nwords, and one idea per caption. Explain the action or result and give each caption\nenough reading time. Keep captions and input badges from overlapping each other or the important UI;\nomit redundant annotations. If annotations obscure the evidence, simplify or remove\nthem before adding camera motion to make room. A clear, complete static edit is a\nbetter starting point than a decorated edit that needs repeated repairs.\nRecorded click events animate the cursor. Use\n`edit.style.reduced_motion` when requested.\n\nSet `edit.style.accent` to `#4a8fff` for an ordinary demonstration, `#ef6b73`\nfor a bug reproduction, or `#58c98a` for a verified fix. Use the video's actual\noutcome to choose the color; an unresolved bug is not a verified fix.\n\nUse `edit.cover.at_ms` to choose a frame that shows what the viewer should notice. The\ncover is the first video frame; the complete story follows. Overlay and camera times\nrefer to the story, so do not offset them for the cover. Derive duration from clip\nranges and speeds; validate to get the exact mapped event times.\n\nCover private information with opaque masks in every affected frame, including the cover\nand zooms. If masks would hide the behavior being demonstrated, request a clean\nrecording instead of sharing it.\n\n## Validate and render\n\n```sh\nsh /absolute/path/to/setup/scripts/cirro.sh validate /absolute/path/screenplay.json --json\nsh /absolute/path/to/setup/scripts/cirro.sh render /absolute/path/screenplay.json -o /absolute/path/demo.webm --json\nsh /absolute/path/to/setup/scripts/cirro.sh frame /absolute/path/screenplay.json --at-ms 2000 -o /absolute/path/review.png\n```\n\nStart with 60 fps and a width near 1440 pixels, adjusted for the source dimensions and\naspect ratio. Upscaling does not add source detail. Wait for encoding to finish.\n\n## Verify and deliver\n\nWatch the finished video. Check that the actions and results are easy to follow. Check\nframes around clicks, zooms, speed changes, masks, and the final result. Watch the opening\nand ending without relying on the prompt: the viewer should understand the setup and\nsee the outcome, not just the last click. Make sure the cover and captions match what happened and private content stays covered. The renderer\ndecodes the output to check VP9/yuv420p WebM, dimensions, frame count, and timing. That\ndoes not establish that the demo shows the task or is easy to follow.\n\nWhen the user is working on a pull request, include the video in that PR using\n[Share Demo Video](../share-demo-video/SKILL.md). Otherwise, show the final video using\nits absolute file path. Mention any limitations in the footage.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}